Reasoning Details

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

Variables: L1 L2 E2 X F T C
PrA : L1 |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
PrB : L2 |{expr}- condExpr C T F ~~> E2
IsE : is_expr (condExpr C T F)
IsL1 : is_list is_string L1
IsL2 : is_list is_string L2
Rel12 : forall X, mem X L1 -> mem X L2
Rel21 : forall X, mem X L2 -> mem X L1
PrA1 : fresh_name "X" L1 X
============================
 stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X) = E2
 < PrB: case PrB.

Variables: L1 L2 X F T C X1
PrA : L1 |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsE : is_expr (condExpr C T F)
IsL1 : is_list is_string L1
IsL2 : is_list is_string L2
Rel12 : forall X, mem X L1 -> mem X L2
Rel21 : forall X, mem X L2 -> mem X L1
PrA1 : fresh_name "X" L1 X
PrB : fresh_name "X" L2 X1
============================
 stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X) = stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
 < apply fresh_name_unique_mems to PrA1 PrB _ _.

Variables: L1 L2 F T C X1
PrA : L1 |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsE : is_expr (condExpr C T F)
IsL1 : is_list is_string L1
IsL2 : is_list is_string L2
Rel12 : forall X, mem X L1 -> mem X L2
Rel21 : forall X, mem X L2 -> mem X L1
PrA1 : fresh_name "X" L1 X1
PrB : fresh_name "X" L2 X1
============================
 stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1) = stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_is.

Variables: L X F T C
Pr : L |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsE : is_expr (condExpr C T F)
IsL : is_list is_string L
Pr1 : fresh_name "X" L X
============================
 is_expr (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X))
 < case IsE.

Variables: L X F T C
Pr : L |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsL : is_list is_string L
Pr1 : fresh_name "X" L X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_expr (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X))
 < apply fresh_name_is to _ Pr1.

Variables: L X F T C
Pr : L |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsL : is_list is_string L
Pr1 : fresh_name "X" L X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_string X
============================
 is_expr (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X))
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_other.

Variables: L L' X F T C
Pr : L |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsE : is_expr (condExpr C T F)
IsL : is_list is_string L
IsL' : is_list is_string L'
Pr1 : fresh_name "X" L X
============================
 exists E'', L' |{expr}- condExpr C T F ~~> E''
 < apply fresh_name_exists to _ IsL' with
     Base = "X".

Variables: L L' X F T C F1
Pr : L |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsE : is_expr (condExpr C T F)
IsL : is_list is_string L
IsL' : is_list is_string L'
Pr1 : fresh_name "X" L X
H1 : fresh_name "X" L' F1
============================
 exists E'', L' |{expr}- condExpr C T F ~~> E''
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_other.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_program_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_program_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_typ_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_typ_is.

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

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

Warning:  No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size
Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
============================
 <is_expr {P}> (condExpr Expr2 Expr1 Expr)
 < apply IH to R1.

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
============================
 <is_expr {P}> (condExpr Expr2 Expr1 Expr)
 < apply IH to R2.

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
============================
 <is_expr {P}> (condExpr Expr2 Expr1 Expr)
 < apply IH to R3.

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
H3 : <is_expr {P}> Expr
============================
 <is_expr {P}> (condExpr Expr2 Expr1 Expr)
 < unfold .

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
H3 : <is_expr {P}> Expr
============================
 exists A1 X_T,
   (<is_expr {P}> Expr2 /\ (<is_expr {P}> Expr1 /\ <is_expr {P}> Expr)) /\
   (A1 |{expr}- condExpr Expr2 Expr1 Expr ~~> X_T /\ <is_expr {P}> X_T)
 < F: assert fresh_name "X" [] "X".

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
H3 : <is_expr {P}> Expr
F : fresh_name "X" [] "X"
============================
 exists A1 X_T,
   (<is_expr {P}> Expr2 /\ (<is_expr {P}> Expr1 /\ <is_expr {P}> Expr)) /\
   (A1 |{expr}- condExpr Expr2 Expr1 Expr ~~> X_T /\ <is_expr {P}> X_T)
 < apply fresh_name_is to _ F.

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
H3 : <is_expr {P}> Expr
F : fresh_name "X" [] "X"
H4 : is_string "X"
============================
 exists A1 X_T,
   (<is_expr {P}> Expr2 /\ (<is_expr {P}> Expr1 /\ <is_expr {P}> Expr)) /\
   (A1 |{expr}- condExpr Expr2 Expr1 Expr ~~> X_T /\ <is_expr {P}> X_T)
 < exists [],
   stmtExpr (seq (declare intTy "X" (num 0)) (ifThenElse Expr2 (assign "X" Expr1) (assign "X" Expr))) (name "X").

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> <is_expr {P}> E
IH1 : forall A, is_args A * -> <is_args {P}> A
IH2 : forall RF, is_recFieldExprs RF * -> <is_recFieldExprs {P}> RF
IH3 : forall S, is_stmt S * -> <is_stmt {P}> S
R : is_expr (condExpr Expr2 Expr1 Expr) @
R1 : is_expr Expr2 *
R2 : is_expr Expr1 *
R3 : is_expr Expr *
H1 : <is_expr {P}> Expr2
H2 : <is_expr {P}> Expr1
H3 : <is_expr {P}> Expr
F : fresh_name "X" [] "X"
H4 : is_string "X"
============================
 (<is_expr {P}> Expr2 /\ (<is_expr {P}> Expr1 /\ <is_expr {P}> Expr)) /\
 ([] |{expr}- condExpr Expr2 Expr1 Expr ~~> stmtExpr (seq (declare intTy "X" (num 0)) (ifThenElse Expr2 (assign "X" Expr1) (assign "X" Expr))) (name "X") /\
 <is_expr {P}> (stmtExpr (seq (declare intTy "X" (num 0)) (ifThenElse Expr2 (assign "X" Expr1) (assign "X" Expr))) (name "X")))
 < search.

Proof completed.
 < Prove exactEval:host:is_args_nilArgs_or_consArgs.

Proof completed.
 < Prove exactEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs.

Proof completed.
 < Prove exactEval:host:vars_unique.

Subgoal 1.21:

Variables: V1 V2 V3 V4 V5 V6 F T C
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
IsE : is_expr (condExpr C T F)
VarsA : vars (condExpr C T F) V1 @
VarsB : vars (condExpr C T F) V2
VarsA1 : vars C V3 *
VarsA2 : vars T V4 *
VarsA3 : vars F V5 *
VarsA4 : V3 ++ V4 = V6
VarsA5 : V6 ++ V5 = V1
============================
 V1 = V2
 < case IsE.

Subgoal 1.21:

Variables: V1 V2 V3 V4 V5 V6 F T C
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsB : vars (condExpr C T F) V2
VarsA1 : vars C V3 *
VarsA2 : vars T V4 *
VarsA3 : vars F V5 *
VarsA4 : V3 ++ V4 = V6
VarsA5 : V6 ++ V5 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 V1 = V2
 < VarsB: case VarsB.

Subgoal 1.21:

Variables: V1 V2 V3 V4 V5 V6 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsA1 : vars C V3 *
VarsA2 : vars T V4 *
VarsA3 : vars F V5 *
VarsA4 : V3 ++ V4 = V6
VarsA5 : V6 ++ V5 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V1 = V2
 < apply IH to _ VarsA1 VarsB.

Subgoal 1.21:

Variables: V1 V2 V4 V5 V6 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsA1 : vars C V7 *
VarsA2 : vars T V4 *
VarsA3 : vars F V5 *
VarsA4 : V7 ++ V4 = V6
VarsA5 : V6 ++ V5 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V1 = V2
 < apply IH to _ VarsA2 VarsB1.

Subgoal 1.21:

Variables: V1 V2 V5 V6 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsA1 : vars C V7 *
VarsA2 : vars T V8 *
VarsA3 : vars F V5 *
VarsA4 : V7 ++ V8 = V6
VarsA5 : V6 ++ V5 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V1 = V2
 < apply IH to _ VarsA3 VarsB2.

Subgoal 1.21:

Variables: V1 V2 V6 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsA1 : vars C V7 *
VarsA2 : vars T V8 *
VarsA3 : vars F V9 *
VarsA4 : V7 ++ V8 = V6
VarsA5 : V6 ++ V9 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V1 = V2
 < apply append_unique to VarsA4 VarsB3.

Subgoal 1.21:

Variables: V1 V2 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V1 @
VarsA1 : vars C V7 *
VarsA2 : vars T V8 *
VarsA3 : vars F V9 *
VarsA4 : V7 ++ V8 = V10
VarsA5 : V10 ++ V9 = V1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V1 = V2
 < apply append_unique to VarsA5 VarsB4.

Subgoal 1.21:

Variables: V2 F T C V7 V8 V9 V10
IH : forall E V1 V2, is_expr E -> vars E V1 * -> vars E V2 -> V1 = V2
IH1 : forall A V1 V2, is_args A -> varsArgs A V1 * -> varsArgs A V2 -> V1 = V2
IH2 : forall RF V1 V2,
        is_recFieldExprs RF -> varsRecFields RF V1 * -> varsRecFields RF V2 -> V1 = V2
VarsA : vars (condExpr C T F) V2 @
VarsA1 : vars C V7 *
VarsA2 : vars T V8 *
VarsA3 : vars F V9 *
VarsA4 : V7 ++ V8 = V10
VarsA5 : V10 ++ V9 = V2
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
VarsB : vars C V7
VarsB1 : vars T V8
VarsB2 : vars F V9
VarsB3 : V7 ++ V8 = V10
VarsB4 : V10 ++ V9 = V2
============================
 V2 = V2
 < search.

Proof completed.
 < Prove exactEval:host:vars_is.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
IsE : is_expr (condExpr C T F)
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
============================
 is_list is_string V
 < case IsE.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list is_string V
 < apply IH to _ V1.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string V2
============================
 is_list is_string V
 < apply IH to _ V2.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string V2
H5 : is_list is_string V3
============================
 is_list is_string V
 < apply IH to _ V3.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string V2
H5 : is_list is_string V3
H6 : is_list is_string V4
============================
 is_list is_string V
 < apply append_list_string_is to _ _ V4.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string V2
H5 : is_list is_string V3
H6 : is_list is_string V4
H7 : is_list is_string V5
============================
 is_list is_string V
 < apply append_list_string_is to _ _ V5.

Subgoal 1.21:

Variables: V V2 V3 V4 V5 F T C
IH : forall E V, is_expr E -> vars E V * -> is_list is_string V
IH1 : forall A V, is_args A -> varsArgs A V * -> is_list is_string V
IH2 : forall RF V,
        is_recFieldExprs RF -> varsRecFields RF V * -> is_list is_string V
V : vars (condExpr C T F) V @
V1 : vars C V2 *
V2 : vars T V3 *
V3 : vars F V4 *
V4 : V2 ++ V3 = V5
V5 : V5 ++ V4 = V
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string V2
H5 : is_list is_string V3
H6 : is_list is_string V4
H7 : is_list is_string V5
H8 : is_list is_string V
============================
 is_list is_string V
 < search.

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

Subgoal 1.21:

Variables: Expr Expr1 Expr2
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < VC: apply IH to IsE1.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < VT: apply IH to IsE2.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < VF: apply IH to IsE3.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < IsVC: apply vars_is to _ VC.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < IsVT: apply vars_is to _ VT.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
IsVT : is_list is_string V1
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < IsVF: apply vars_is to _ VF.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
IsVT : is_list is_string V1
IsVF : is_list is_string V2
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < App: apply append_list_string_total to IsVC IsVT.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2 L3
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
IsVT : is_list is_string V1
IsVF : is_list is_string V2
App : V ++ V1 = L3
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < IsL3: apply append_list_string_is to _ _ App.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2 L3
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
IsVT : is_list is_string V1
IsVF : is_list is_string V2
App : V ++ V1 = L3
IsL3 : is_list is_string L3
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < apply append_list_string_total to IsL3 IsVF.

Subgoal 1.21:

Variables: Expr Expr1 Expr2 V V1 V2 L3 L1
IH : forall E, is_expr E * -> exists V, vars E V
IH1 : forall A, is_args A * -> exists V, varsArgs A V
IH2 : forall RF, is_recFieldExprs RF * -> exists V, varsRecFields RF V
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
VC : vars Expr2 V
VT : vars Expr1 V1
VF : vars Expr V2
IsVC : is_list is_string V
IsVT : is_list is_string V1
IsVF : is_list is_string V2
App : V ++ V1 = L3
IsL3 : is_list is_string L3
H1 : L3 ++ V2 = L1
============================
 exists V, vars (condExpr Expr2 Expr1 Expr) V
 < search.

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

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsE : is_expr (condExpr C T F)
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
============================
 is_list is_string N
 < case IsE.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list is_string N
 < apply IH_E to _ _ EN1.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string CN
============================
 is_list is_string N
 < apply IH_E to _ _ EN2.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string CN
H5 : is_list is_string TN
============================
 is_list is_string N
 < apply IH_E to _ _ EN3.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string CN
H5 : is_list is_string TN
H6 : is_list is_string FN
============================
 is_list is_string N
 < apply append_list_string_is to _ _ EN4.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string CN
H5 : is_list is_string TN
H6 : is_list is_string FN
H7 : is_list is_string N2
============================
 is_list is_string N
 < apply append_list_string_is to _ _ EN5.

Subgoal 3.22:

Variables: Ctx N CN TN FN N2 F T C
IH_S : forall Ctx S N Ctx',
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
         is_list is_string N
IH_S_C : forall Ctx S N Ctx',
           is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S N Ctx' * ->
           is_list (is_list is_string) Ctx'
IH_E : forall Ctx E N,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> is_list is_string N
IH_A : forall Ctx A N,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> is_list is_string N
IH_RF : forall Ctx RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          is_list is_string N
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list is_string CN
H5 : is_list is_string TN
H6 : is_list is_string FN
H7 : is_list is_string N2
H8 : is_list is_string N
============================
 is_list is_string N
 < search.

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

Subgoal 2.22:

Variables: Ctx NA NB CN TN FN N1 F T C
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsE : is_expr (condExpr C T F)
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENB : exprNames Ctx (condExpr C T F) NB
ENA1 : exprNames Ctx C CN *
ENA2 : exprNames Ctx T TN *
ENA3 : exprNames Ctx F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
============================
 NA = NB
 < case IsE.

Subgoal 2.22:

Variables: Ctx NA NB CN TN FN N1 F T C
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENB : exprNames Ctx (condExpr C T F) NB
ENA1 : exprNames Ctx C CN *
ENA2 : exprNames Ctx T TN *
ENA3 : exprNames Ctx F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 NA = NB
 < ENB: case ENB.

Subgoal 2.22:

Variables: Ctx NA NB CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENA1 : exprNames Ctx C CN *
ENA2 : exprNames Ctx T TN *
ENA3 : exprNames Ctx F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NA = NB
 < apply IH_E to _ _ ENA1 ENB.

Subgoal 2.22:

Variables: Ctx NA NB TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENA1 : exprNames Ctx C CN1 *
ENA2 : exprNames Ctx T TN *
ENA3 : exprNames Ctx F FN *
ENA4 : CN1 ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NA = NB
 < apply IH_E to _ _ ENA2 ENB1.

Subgoal 2.22:

Variables: Ctx NA NB FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENA1 : exprNames Ctx C CN1 *
ENA2 : exprNames Ctx T TN1 *
ENA3 : exprNames Ctx F FN *
ENA4 : CN1 ++ TN1 = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NA = NB
 < apply IH_E to _ _ ENA3 ENB2.

Subgoal 2.22:

Variables: Ctx NA NB N1 F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENA1 : exprNames Ctx C CN1 *
ENA2 : exprNames Ctx T TN1 *
ENA3 : exprNames Ctx F FN1 *
ENA4 : CN1 ++ TN1 = N1
ENA5 : N1 ++ FN1 = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NA = NB
 < apply append_unique to ENA4 ENB3.

Subgoal 2.22:

Variables: Ctx NA NB F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NA @
ENA1 : exprNames Ctx C CN1 *
ENA2 : exprNames Ctx T TN1 *
ENA3 : exprNames Ctx F FN1 *
ENA4 : CN1 ++ TN1 = N2
ENA5 : N2 ++ FN1 = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NA = NB
 < apply append_unique to ENA5 ENB4.

Subgoal 2.22:

Variables: Ctx NB F T C CN1 TN1 FN1 N2
IH_S : forall Ctx S NA CtxA NB CtxB,
         is_stmt S -> is_list (is_list is_string) Ctx -> stmtNames Ctx S NA CtxA * ->
         stmtNames Ctx S NB CtxB -> NA = NB /\ CtxA = CtxB
IH_E : forall Ctx E NA NB,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E NA * ->
         exprNames Ctx E NB -> NA = NB
IH_A : forall Ctx A NA NB,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A NA * ->
         argsNames Ctx A NB -> NA = NB
IH_RF : forall Ctx RF NA NB,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF NA * ->
          recFieldNames Ctx RF NB -> NA = NB
IsCtx : is_list (is_list is_string) Ctx
ENA : exprNames Ctx (condExpr C T F) NB @
ENA1 : exprNames Ctx C CN1 *
ENA2 : exprNames Ctx T TN1 *
ENA3 : exprNames Ctx F FN1 *
ENA4 : CN1 ++ TN1 = N2
ENA5 : N2 ++ FN1 = NB
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames Ctx C CN1
ENB1 : exprNames Ctx T TN1
ENB2 : exprNames Ctx F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 NB = NB
 < search.

Proof completed.
 < Prove exactEval:host:stmtNames_keep_older.

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

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < ENC: apply IH_E to IsE1 _.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < ENT: apply IH_E to IsE2 _.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < ENF: apply IH_E to IsE3 _.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < IsC: apply exprNames_is to _ _ ENC.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < IsT: apply exprNames_is to _ _ ENT.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
IsT : is_list is_string N1
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < IsF: apply exprNames_is to _ _ ENF.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
IsT : is_list is_string N1
IsF : is_list is_string N2
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < App: apply append_list_string_total to IsC IsT.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2 L3
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
IsT : is_list is_string N1
IsF : is_list is_string N2
App : N ++ N1 = L3
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < IsL3: apply append_list_string_is to _ _ App.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2 L3
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
IsT : is_list is_string N1
IsF : is_list is_string N2
App : N ++ N1 = L3
IsL3 : is_list is_string L3
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < apply append_list_string_total to IsL3 IsF.

Subgoal 2.21:

Variables: Ctx Expr Expr1 Expr2 N N1 N2 L3 L1
IH_S : forall Scope Ctx S,
         is_stmt S * -> is_list (is_list is_string) (Scope::Ctx) -> exists N Ctx',
           stmtNames (Scope::Ctx) S N Ctx'
IH_E : forall Ctx E,
         is_expr E * -> is_list (is_list is_string) Ctx -> exists N,
           exprNames Ctx E N
IH_A : forall Ctx A,
         is_args A * -> is_list (is_list is_string) Ctx -> exists N,
           argsNames Ctx A N
IH_RF : forall Ctx RF,
          is_recFieldExprs RF * -> is_list (is_list is_string) Ctx -> exists N,
            recFieldNames Ctx RF N
IsE : is_expr (condExpr Expr2 Expr1 Expr) @
IsCtx : is_list (is_list is_string) Ctx
IsE1 : is_expr Expr2 *
IsE2 : is_expr Expr1 *
IsE3 : is_expr Expr *
ENC : exprNames Ctx Expr2 N
ENT : exprNames Ctx Expr1 N1
ENF : exprNames Ctx Expr N2
IsC : is_list is_string N
IsT : is_list is_string N1
IsF : is_list is_string N2
App : N ++ N1 = L3
IsL3 : is_list is_string L3
H1 : L3 ++ N2 = L1
============================
 exists N, exprNames Ctx (condExpr Expr2 Expr1 Expr) N
 < search.

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

Subgoal 2.22:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsE : is_expr (condExpr C T F)
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
============================
 false
 < case IsE.

Subgoal 2.22:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 false
 < Or: apply mem_append to MemN EN5.

Subgoal 2.22:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Or : mem X N2 \/ mem X FN
============================
 false
 < M: case Or.

Subgoal 2.22.1:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
M : mem X N2
============================
 false
 < Or: apply mem_append to M EN4.

Subgoal 2.22.1:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
M : mem X N2
Or : mem X CN \/ mem X TN
============================
 false
 < M': case Or.

Subgoal 2.22.1.1:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
M : mem X N2
M' : mem X CN
============================
 false
 < apply IH_E to _ _ EN1 M' MemsCtx.

Subgoal 2.22.1.2:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
M : mem X N2
M' : mem X TN
============================
 false
 < apply IH_E to _ _ EN2 M' MemsCtx.

Subgoal 2.22.2:

Variables: Ctx N X CN TN FN N2 F T C
IH_S : forall Scope Ctx S N Ctx' X,
         is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
         mem X N -> mems X (Scope::Ctx) -> false
IH_E : forall Ctx E N X,
         is_expr E -> is_list (is_list is_string) Ctx -> exprNames Ctx E N * -> mem X N ->
         mems X Ctx -> false
IH_A : forall Ctx A N X,
         is_args A -> is_list (is_list is_string) Ctx -> argsNames Ctx A N * -> mem X N ->
         mems X Ctx -> false
IH_RF : forall Ctx RF N X,
          is_recFieldExprs RF -> is_list (is_list is_string) Ctx -> recFieldNames Ctx RF N * ->
          mem X N -> mems X Ctx -> false
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N @
MemN : mem X N
MemsCtx : mems X Ctx
EN1 : exprNames Ctx C CN *
EN2 : exprNames Ctx T TN *
EN3 : exprNames Ctx F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
M : mem X FN
============================
 false
 < apply IH_E to _ _ EN3 M MemsCtx.

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

Subgoal 4.22:

Variables: CtxA CtxB N CN TN FN N2 F T C
IH_S : forall ScopeA CtxA S N CtxA' ScopeB CtxB,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)) -> (forall X,
           mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)) -> stmtNames (ScopeA::CtxA) S N CtxA' * ->
         exists CtxB', stmtNames (ScopeB::CtxB) S N CtxB'
IH_S_CAB : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxA -> mems X1 CtxB) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_S_CBA : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxB -> mems X1 CtxA) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxB' -> mems X CtxA'
IH_E : forall CtxA CtxB E N,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> exprNames CtxA E N * -> exprNames CtxB E N
IH_A : forall CtxA CtxB A N,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> argsNames CtxA A N * -> argsNames CtxB A N
IH_RF : forall CtxA CtxB RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
            mems X CtxB -> mems X CtxA) -> recFieldNames CtxA RF N * -> recFieldNames CtxB RF N
IsE : is_expr (condExpr C T F)
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X, mems X CtxA -> mems X CtxB
RelBA : forall X, mems X CtxB -> mems X CtxA
EN : exprNames CtxA (condExpr C T F) N @
EN1 : exprNames CtxA C CN *
EN2 : exprNames CtxA T TN *
EN3 : exprNames CtxA F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
============================
 exprNames CtxB (condExpr C T F) N
 < case IsE.

Subgoal 4.22:

Variables: CtxA CtxB N CN TN FN N2 F T C
IH_S : forall ScopeA CtxA S N CtxA' ScopeB CtxB,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)) -> (forall X,
           mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)) -> stmtNames (ScopeA::CtxA) S N CtxA' * ->
         exists CtxB', stmtNames (ScopeB::CtxB) S N CtxB'
IH_S_CAB : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxA -> mems X1 CtxB) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_S_CBA : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxB -> mems X1 CtxA) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxB' -> mems X CtxA'
IH_E : forall CtxA CtxB E N,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> exprNames CtxA E N * -> exprNames CtxB E N
IH_A : forall CtxA CtxB A N,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> argsNames CtxA A N * -> argsNames CtxB A N
IH_RF : forall CtxA CtxB RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
            mems X CtxB -> mems X CtxA) -> recFieldNames CtxA RF N * -> recFieldNames CtxB RF N
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X, mems X CtxA -> mems X CtxB
RelBA : forall X, mems X CtxB -> mems X CtxA
EN : exprNames CtxA (condExpr C T F) N @
EN1 : exprNames CtxA C CN *
EN2 : exprNames CtxA T TN *
EN3 : exprNames CtxA F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exprNames CtxB (condExpr C T F) N
 < apply IH_E to _ _ _ RelAB RelBA EN1.

Subgoal 4.22:

Variables: CtxA CtxB N CN TN FN N2 F T C
IH_S : forall ScopeA CtxA S N CtxA' ScopeB CtxB,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)) -> (forall X,
           mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)) -> stmtNames (ScopeA::CtxA) S N CtxA' * ->
         exists CtxB', stmtNames (ScopeB::CtxB) S N CtxB'
IH_S_CAB : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxA -> mems X1 CtxB) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_S_CBA : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxB -> mems X1 CtxA) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxB' -> mems X CtxA'
IH_E : forall CtxA CtxB E N,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> exprNames CtxA E N * -> exprNames CtxB E N
IH_A : forall CtxA CtxB A N,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> argsNames CtxA A N * -> argsNames CtxB A N
IH_RF : forall CtxA CtxB RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
            mems X CtxB -> mems X CtxA) -> recFieldNames CtxA RF N * -> recFieldNames CtxB RF N
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X, mems X CtxA -> mems X CtxB
RelBA : forall X, mems X CtxB -> mems X CtxA
EN : exprNames CtxA (condExpr C T F) N @
EN1 : exprNames CtxA C CN *
EN2 : exprNames CtxA T TN *
EN3 : exprNames CtxA F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : exprNames CtxB C CN
============================
 exprNames CtxB (condExpr C T F) N
 < apply IH_E to _ _ _ RelAB RelBA EN2.

Subgoal 4.22:

Variables: CtxA CtxB N CN TN FN N2 F T C
IH_S : forall ScopeA CtxA S N CtxA' ScopeB CtxB,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)) -> (forall X,
           mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)) -> stmtNames (ScopeA::CtxA) S N CtxA' * ->
         exists CtxB', stmtNames (ScopeB::CtxB) S N CtxB'
IH_S_CAB : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxA -> mems X1 CtxB) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_S_CBA : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxB -> mems X1 CtxA) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxB' -> mems X CtxA'
IH_E : forall CtxA CtxB E N,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> exprNames CtxA E N * -> exprNames CtxB E N
IH_A : forall CtxA CtxB A N,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> argsNames CtxA A N * -> argsNames CtxB A N
IH_RF : forall CtxA CtxB RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
            mems X CtxB -> mems X CtxA) -> recFieldNames CtxA RF N * -> recFieldNames CtxB RF N
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X, mems X CtxA -> mems X CtxB
RelBA : forall X, mems X CtxB -> mems X CtxA
EN : exprNames CtxA (condExpr C T F) N @
EN1 : exprNames CtxA C CN *
EN2 : exprNames CtxA T TN *
EN3 : exprNames CtxA F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : exprNames CtxB C CN
H5 : exprNames CtxB T TN
============================
 exprNames CtxB (condExpr C T F) N
 < apply IH_E to _ _ _ RelAB RelBA EN3.

Subgoal 4.22:

Variables: CtxA CtxB N CN TN FN N2 F T C
IH_S : forall ScopeA CtxA S N CtxA' ScopeB CtxB,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)) -> (forall X,
           mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)) -> stmtNames (ScopeA::CtxA) S N CtxA' * ->
         exists CtxB', stmtNames (ScopeB::CtxB) S N CtxB'
IH_S_CAB : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxA -> mems X1 CtxB) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_S_CBA : forall CtxA S NA CtxA' CtxB NB CtxB' X,
             is_stmt S -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
             (forall X1, mems X1 CtxB -> mems X1 CtxA) -> stmtNames CtxA S NA CtxA' * ->
             stmtNames CtxB S NB CtxB' -> mems X CtxB' -> mems X CtxA'
IH_E : forall CtxA CtxB E N,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> exprNames CtxA E N * -> exprNames CtxB E N
IH_A : forall CtxA CtxB A N,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
           mems X CtxB -> mems X CtxA) -> argsNames CtxA A N * -> argsNames CtxB A N
IH_RF : forall CtxA CtxB RF N,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X, mems X CtxA -> mems X CtxB) -> (forall X,
            mems X CtxB -> mems X CtxA) -> recFieldNames CtxA RF N * -> recFieldNames CtxB RF N
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X, mems X CtxA -> mems X CtxB
RelBA : forall X, mems X CtxB -> mems X CtxA
EN : exprNames CtxA (condExpr C T F) N @
EN1 : exprNames CtxA C CN *
EN2 : exprNames CtxA T TN *
EN3 : exprNames CtxA F FN *
EN4 : CN ++ TN = N2
EN5 : N2 ++ FN = N
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : exprNames CtxB C CN
H5 : exprNames CtxB T TN
H6 : exprNames CtxB F FN
============================
 exprNames CtxB (condExpr C T F) N
 < search.

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

Subgoal 3.22:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsE : is_expr (condExpr C T F)
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
ENB : exprNames CtxB (condExpr C T F) NB
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
============================
 mem X NA
 < case IsE.

Subgoal 3.22:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
ENB : exprNames CtxB (condExpr C T F) NB
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 mem X NA
 < ENB: case ENB.

Subgoal 3.22:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
============================
 mem X NA
 < Or: apply mem_append to M ENB4.

Subgoal 3.22:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
Or : mem X N2 \/ mem X FN1
============================
 mem X NA
 < M': case Or.

Subgoal 3.22.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
============================
 mem X NA
 < Or: apply mem_append to M' ENB3.

Subgoal 3.22.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
Or : mem X CN1 \/ mem X TN1
============================
 mem X NA
 < M'': case Or.

Subgoal 3.22.1.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X CN1
============================
 mem X NA
 < MC: apply IH_E to _ _ _ _ ENA1 ENB M''.

Subgoal 3.22.1.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X CN1
MC : mem X CN
============================
 mem X NA
 < M1: apply mem_append_left to MC ENA4.

Subgoal 3.22.1.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X CN1
MC : mem X CN
M1 : mem X N1
============================
 mem X NA
 < apply mem_append_left to M1 ENA5.

Subgoal 3.22.1.1:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X CN1
MC : mem X CN
M1 : mem X N1
H4 : mem X NA
============================
 mem X NA
 < search.

Subgoal 3.22.1.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X TN1
============================
 mem X NA
 < MT: apply IH_E to _ _ _ _ ENA2 ENB1 M''.

Subgoal 3.22.1.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X TN1
MT : mem X TN
============================
 mem X NA
 < M1: apply mem_append_right to MT ENA4.

Subgoal 3.22.1.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X TN1
MT : mem X TN
M1 : mem X N1
============================
 mem X NA
 < apply mem_append_left to M1 ENA5.

Subgoal 3.22.1.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X N2
M'' : mem X TN1
MT : mem X TN
M1 : mem X N1
H4 : mem X NA
============================
 mem X NA
 < search.

Subgoal 3.22.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X FN1
============================
 mem X NA
 < MF: apply IH_E to _ _ _ _ ENA3 ENB2 M'.

Subgoal 3.22.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X FN1
MF : mem X FN
============================
 mem X NA
 < apply mem_append_right to MF ENA5.

Subgoal 3.22.2:

Variables: CtxA NA CtxB NB X CN TN FN N1 F T C CN1 TN1 FN1 N2
IH_S : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
         is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
         (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
         stmtNames (ScopeB::CtxB) S NB CtxB' -> mem X NB -> mem X NA
IH_S_C : forall ScopeA CtxA S NA CtxA' ScopeB CtxB NB CtxB' X,
           is_stmt S -> is_list (is_list is_string) (ScopeA::CtxA) -> is_list (is_list is_string) (ScopeB::CtxB) ->
           (forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)) -> stmtNames (ScopeA::CtxA) S NA CtxA' * ->
           stmtNames (ScopeB::CtxB) S NB CtxB' -> mems X CtxA' -> mems X CtxB'
IH_E : forall CtxA E NA CtxB NB X,
         is_expr E -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> exprNames CtxA E NA * -> exprNames CtxB E NB ->
         mem X NB -> mem X NA
IH_A : forall CtxA A NA CtxB NB X,
         is_args A -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
         (forall X1, mems X1 CtxA -> mems X1 CtxB) -> argsNames CtxA A NA * -> argsNames CtxB A NB ->
         mem X NB -> mem X NA
IH_RF : forall CtxA RF NA CtxB NB X,
          is_recFieldExprs RF -> is_list (is_list is_string) CtxA -> is_list (is_list is_string) CtxB ->
          (forall X1, mems X1 CtxA -> mems X1 CtxB) -> recFieldNames CtxA RF NA * ->
          recFieldNames CtxB RF NB -> mem X NB -> mem X NA
IsCtxA : is_list (is_list is_string) CtxA
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 CtxA -> mems X1 CtxB
ENA : exprNames CtxA (condExpr C T F) NA @
M : mem X NB
ENA1 : exprNames CtxA C CN *
ENA2 : exprNames CtxA T TN *
ENA3 : exprNames CtxA F FN *
ENA4 : CN ++ TN = N1
ENA5 : N1 ++ FN = NA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
ENB : exprNames CtxB C CN1
ENB1 : exprNames CtxB T TN1
ENB2 : exprNames CtxB F FN1
ENB3 : CN1 ++ TN1 = N2
ENB4 : N2 ++ FN1 = NB
M' : mem X FN1
MF : mem X FN
H4 : mem X NA
============================
 mem X NA
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_exprNames.

Variables: Names Ctx N N_P X X1 F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsE : is_expr (condExpr C T F)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N
EN_P : exprNames Ctx (stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)) N_P
M : mem X N_P
Pr1 : fresh_name "X" Names X1
============================
 mem X N
 < case IsE.

Variables: Names Ctx N N_P X X1 F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
EN : exprNames Ctx (condExpr C T F) N
EN_P : exprNames Ctx (stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)) N_P
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 mem X N
 < EN: case EN.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
EN_P : exprNames Ctx (stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)) N_P
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
============================
 mem X N
 < EN_P: case EN_P.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CtxS NE
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : stmtNames ([]::Ctx) (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) NS CtxS
EN_P1 : exprNames CtxS (name X1) NE
EN_P2 : NS ++ NE = N_P
============================
 mem X N
 < EN_P: case EN_P.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CtxS NE N1 Ctx3 N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames CtxS (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P : stmtNames ([]::Ctx) (declare intTy X1 (num 0)) N1 Ctx3
EN_P3 : stmtNames Ctx3 (ifThenElse C (assign X1 T) (assign X1 F)) N3 CtxS
EN_P4 : N1 ++ N3 = NS
============================
 mem X N
 < EN_P: case EN_P.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CtxS NE N1 N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames CtxS (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P3 : stmtNames ([X1]::Ctx) (ifThenElse C (assign X1 T) (assign X1 F)) N3 CtxS
EN_P4 : N1 ++ N3 = NS
EN_P : exprNames ([]::Ctx) (num 0) N1
============================
 mem X N
 < case EN_P.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CtxS NE N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames CtxS (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P3 : stmtNames ([X1]::Ctx) (ifThenElse C (assign X1 T) (assign X1 F)) N3 CtxS
EN_P4 : [] ++ N3 = NS
============================
 mem X N
 < case EN_P4.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CtxS NE
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames CtxS (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P3 : stmtNames ([X1]::Ctx) (ifThenElse C (assign X1 T) (assign X1 F)) NS CtxS
============================
 mem X N
 < EN_P: case EN_P3.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS NE CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames ([X1]::Ctx) (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
============================
 mem X N
 < Eq: assert NE = [].

Subgoal 1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS NE CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames ([X1]::Ctx) (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
============================
 NE = []
 < M': case EN_P1.

Subgoal 1.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ [] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
M' : mems X1 ([X1]::Ctx)
============================
 [] = []
 < search.

Subgoal 1.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ [X1] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
M' : not_mems X1 ([X1]::Ctx)
============================
 [X1] = []
 < NM: case M'.

Subgoal 1.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ [X1] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
NM : not_mem X1 [X1]
NM1 : not_mems X1 Ctx
============================
 [X1] = []
 < N: case NM.

Subgoal 1.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ [X1] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
NM1 : not_mems X1 Ctx
N : X1 = X1 -> false
N1 : not_mem X1 []
============================
 [X1] = []
 < apply N to _.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS NE CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P1 : exprNames ([X1]::Ctx) (name X1) NE
EN_P2 : NS ++ NE = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
Eq : NE = []
============================
 mem X N
 < clear EN_P1.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS NE CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ NE = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
Eq : NE = []
============================
 mem X N
 < case Eq.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 NS CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : NS ++ [] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = NS
============================
 mem X N
 < apply append_nil_right to EN_P2.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P2 : N_P ++ [] = N_P
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
============================
 mem X N
 < clear EN_P2.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
============================
 mem X N
 < apply fresh_name_is to _ Pr1.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
============================
 mem X N
 < Or: apply mem_append to M EN_P6.

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
Or : mem X N4 \/ mem X FN1
============================
 mem X N
 < M': case Or.

Subgoal 2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
============================
 mem X N
 < Or: apply mem_append to M' EN_P5.

Subgoal 2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
Or : mem X CN1 \/ mem X TN1
============================
 mem X N
 < M'': case Or.

Subgoal 2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X CN1
============================
 mem X N
 < MC: apply exprNames_increaseCtxs to _ _ _ _ EN EN_P M''.

Subgoal 2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X CN1
MC : mem X CN
============================
 mem X N
 < M1: apply mem_append_left to MC EN3.

Subgoal 2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X CN1
MC : mem X CN
M1 : mem X N2
============================
 mem X N
 < apply mem_append_left to M1 EN4.

Subgoal 2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X CN1
MC : mem X CN
M1 : mem X N2
H5 : mem X N
============================
 mem X N
 < search.

Subgoal 2.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X TN1
============================
 mem X N
 < AN: case EN_P3.

Subgoal 2.2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X TN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) T TN1
============================
 mem X N
 < MT: apply exprNames_increaseCtxs to _ _ _ _ EN1 AN1 M''.

Subgoal 2.2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X TN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) T TN1
MT : mem X TN
============================
 mem X N
 < M1: apply mem_append_right to MT EN3.

Subgoal 2.2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X TN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) T TN1
MT : mem X TN
M1 : mem X N2
============================
 mem X N
 < apply mem_append_left to M1 EN4.

Subgoal 2.2.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X TN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) T TN1
MT : mem X TN
M1 : mem X N2
H5 : mem X N
============================
 mem X N
 < search.

Subgoal 2.2.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 FN1 CtxF N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ X1::N5 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X (X1::N5)
AN : not_mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) T N5
============================
 mem X N
 < MN: case AN.

Subgoal 2.2.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 FN1 CtxF N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ X1::N5 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) T N5
MN : not_mem X1 []
MN1 : not_mems X1 ([X1]::Ctx)
============================
 mem X N
 < MN: case MN1.

Subgoal 2.2.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 FN1 CtxF N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ X1::N5 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) T N5
MN : not_mem X1 []
MN1 : not_mem X1 [X1]
MN2 : not_mems X1 Ctx
============================
 mem X N
 < N: case MN1.

Subgoal 2.2.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 FN1 CtxF N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ X1::N5 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X N4
M'' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) T N5
MN : not_mem X1 []
MN2 : not_mems X1 Ctx
N : X1 = X1 -> false
N1 : not_mem X1 []
============================
 mem X N
 < apply N to _.

Subgoal 3:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 CtxF N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P4 : stmtNames ([]::([X1]::Ctx)) (assign X1 F) FN1 CtxF
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X FN1
============================
 mem X N
 < AN: case EN_P4.

Subgoal 3.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X FN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) F FN1
============================
 mem X N
 < MF: apply exprNames_increaseCtxs to _ _ _ _ EN2 AN1 M'.

Subgoal 3.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X FN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) F FN1
MF : mem X FN
============================
 mem X N
 < apply mem_append_right to MF EN4.

Subgoal 3.1:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT FN1 N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ FN1 = N_P
H4 : is_string X1
M' : mem X FN1
AN : mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) F FN1
MF : mem X FN
H5 : mem X N
============================
 mem X N
 < search.

Subgoal 3.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ X1::N5 = N_P
H4 : is_string X1
M' : mem X (X1::N5)
AN : not_mems X1 ([]::([X1]::Ctx))
AN1 : exprNames ([]::([X1]::Ctx)) F N5
============================
 mem X N
 < MN: case AN.

Subgoal 3.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ X1::N5 = N_P
H4 : is_string X1
M' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) F N5
MN : not_mem X1 []
MN1 : not_mems X1 ([X1]::Ctx)
============================
 mem X N
 < MN: case MN1.

Subgoal 3.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ X1::N5 = N_P
H4 : is_string X1
M' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) F N5
MN : not_mem X1 []
MN1 : not_mem X1 [X1]
MN2 : not_mems X1 Ctx
============================
 mem X N
 < N: case MN1.

Subgoal 3.2:

Variables: Names Ctx N N_P X X1 F T C CN TN FN N2 CN1 TN1 CtxT N4 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X1 (num 0)) (ifThenElse C (assign X1 T) (assign X1 F))) (name X1)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) Ctx
M : mem X N_P
Pr1 : fresh_name "X" Names X1
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
EN_P : exprNames ([X1]::Ctx) C CN1
EN_P3 : stmtNames ([]::([X1]::Ctx)) (assign X1 T) TN1 CtxT
EN_P5 : CN1 ++ TN1 = N4
EN_P6 : N4 ++ X1::N5 = N_P
H4 : is_string X1
M' : mem X (X1::N5)
AN1 : exprNames ([]::([X1]::Ctx)) F N5
MN : not_mem X1 []
MN2 : not_mems X1 Ctx
N : X1 = X1 -> false
N1 : not_mem X1 []
============================
 mem X N
 < apply N to _.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_backward.

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

Subgoal 1.23:

Variables: FT ET Ty F T C
IH : forall E FT ET Ty,
       is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
       is_typ Ty
IH1 : forall S FT ET ET',
        is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> stmtOK FT ET S ET' * ->
        is_list (is_list (is_pair is_string is_typ)) ET'
IH2 : forall A FT ET Tys,
        is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
        is_list is_typ Tys
IH3 : forall RF FT ET Fields,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
        is_recFieldTys Fields
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (condExpr C T F) Ty @
Ty1 : typeOf FT ET C boolTy *
Ty2 : typeOf FT ET T Ty *
Ty3 : typeOf FT ET F Ty *
============================
 is_typ Ty
 < case IsE.

Subgoal 1.23:

Variables: FT ET Ty F T C
IH : forall E FT ET Ty,
       is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
       is_typ Ty
IH1 : forall S FT ET ET',
        is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> stmtOK FT ET S ET' * ->
        is_list (is_list (is_pair is_string is_typ)) ET'
IH2 : forall A FT ET Tys,
        is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
        is_list is_typ Tys
IH3 : forall RF FT ET Fields,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
        is_recFieldTys Fields
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (condExpr C T F) Ty @
Ty1 : typeOf FT ET C boolTy *
Ty2 : typeOf FT ET T Ty *
Ty3 : typeOf FT ET F Ty *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_typ Ty
 < apply IH to _ _ _ Ty2.

Subgoal 1.23:

Variables: FT ET Ty F T C
IH : forall E FT ET Ty,
       is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       is_list (is_list (is_pair is_string is_typ)) ET -> typeOf FT ET E Ty * ->
       is_typ Ty
IH1 : forall S FT ET ET',
        is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> stmtOK FT ET S ET' * ->
        is_list (is_list (is_pair is_string is_typ)) ET'
IH2 : forall A FT ET Tys,
        is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfArgs FT ET A Tys * ->
        is_list is_typ Tys
IH3 : forall RF FT ET Fields,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
        is_list (is_list (is_pair is_string is_typ)) ET -> typeOfRecFields FT ET RF Fields * ->
        is_recFieldTys Fields
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
Ty : typeOf FT ET (condExpr C T F) Ty @
Ty1 : typeOf FT ET C boolTy *
Ty2 : typeOf FT ET T Ty *
Ty3 : typeOf FT ET F Ty *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_typ Ty
============================
 is_typ Ty
 < search.

Proof completed.
 < Prove exactEval:host:stmtOK_keep_scopes.

Proof completed.
 < Prove exactEval:host:stmtOK_older_scopes_same.

Proof completed.
 < Prove exactEval:host:stmtOK_first_scope_lookup_same.

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

Subgoal 1.23:

Variables: FT ET_A ET_B TyA TyB F T C
IH_E : forall FT ET_A ET_B E TyA TyB,
         is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
         TyA = TyB
IH_S : forall FT ET_A ET_B S ET_A' ET_B',
         is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         stmtOK FT ET_A S ET_A' * -> stmtOK FT ET_B S ET_B' -> lookup_all_scopes ET_A ET_B ->
         lookup_all_scopes ET_A' ET_B'
IH_A : forall FT ET_A ET_B A TysA TysB,
         is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
         TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
          is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
          typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
          lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (condExpr C T F) TyA @
TyB : typeOf FT ET_B (condExpr C T F) TyB
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A C boolTy *
TyA2 : typeOf FT ET_A T TyA *
TyA3 : typeOf FT ET_A F TyA *
============================
 TyA = TyB
 < case IsE.

Subgoal 1.23:

Variables: FT ET_A ET_B TyA TyB F T C
IH_E : forall FT ET_A ET_B E TyA TyB,
         is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
         TyA = TyB
IH_S : forall FT ET_A ET_B S ET_A' ET_B',
         is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         stmtOK FT ET_A S ET_A' * -> stmtOK FT ET_B S ET_B' -> lookup_all_scopes ET_A ET_B ->
         lookup_all_scopes ET_A' ET_B'
IH_A : forall FT ET_A ET_B A TysA TysB,
         is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
         TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
          is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
          typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
          lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (condExpr C T F) TyA @
TyB : typeOf FT ET_B (condExpr C T F) TyB
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A C boolTy *
TyA2 : typeOf FT ET_A T TyA *
TyA3 : typeOf FT ET_A F TyA *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 TyA = TyB
 < TyB: case TyB.

Subgoal 1.23:

Variables: FT ET_A ET_B TyA TyB F T C
IH_E : forall FT ET_A ET_B E TyA TyB,
         is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
         TyA = TyB
IH_S : forall FT ET_A ET_B S ET_A' ET_B',
         is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         stmtOK FT ET_A S ET_A' * -> stmtOK FT ET_B S ET_B' -> lookup_all_scopes ET_A ET_B ->
         lookup_all_scopes ET_A' ET_B'
IH_A : forall FT ET_A ET_B A TysA TysB,
         is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
         TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
          is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
          typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
          lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (condExpr C T F) TyA @
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A C boolTy *
TyA2 : typeOf FT ET_A T TyA *
TyA3 : typeOf FT ET_A F TyA *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
TyB : typeOf FT ET_B C boolTy
TyB1 : typeOf FT ET_B T TyB
TyB2 : typeOf FT ET_B F TyB
============================
 TyA = TyB
 < apply IH_E to _ _ _ _ TyA2 TyB1 _.

Subgoal 1.23:

Variables: FT ET_A ET_B TyB F T C
IH_E : forall FT ET_A ET_B E TyA TyB,
         is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOf FT ET_A E TyA * -> typeOf FT ET_B E TyB -> lookup_all_scopes ET_A ET_B ->
         TyA = TyB
IH_S : forall FT ET_A ET_B S ET_A' ET_B',
         is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         stmtOK FT ET_A S ET_A' * -> stmtOK FT ET_B S ET_B' -> lookup_all_scopes ET_A ET_B ->
         lookup_all_scopes ET_A' ET_B'
IH_A : forall FT ET_A ET_B A TysA TysB,
         is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
         is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
         typeOfArgs FT ET_A A TysA * -> typeOfArgs FT ET_B A TysB -> lookup_all_scopes ET_A ET_B ->
         TysA = TysB
IH_RF : forall FT ET_A ET_B RF FieldsA FieldsB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
          is_list (is_list (is_pair is_string is_typ)) ET_A -> is_list (is_list (is_pair is_string is_typ)) ET_B ->
          typeOfRecFields FT ET_A RF FieldsA * -> typeOfRecFields FT ET_B RF FieldsB ->
          lookup_all_scopes ET_A ET_B -> FieldsA = FieldsB
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsA : is_list (is_list (is_pair is_string is_typ)) ET_A
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : typeOf FT ET_A (condExpr C T F) TyB @
Lkp : lookup_all_scopes ET_A ET_B
TyA1 : typeOf FT ET_A C boolTy *
TyA2 : typeOf FT ET_A T TyB *
TyA3 : typeOf FT ET_A F TyB *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
TyB : typeOf FT ET_B C boolTy
TyB1 : typeOf FT ET_B T TyB
TyB2 : typeOf FT ET_B F TyB
============================
 TyB = TyB
 < search.

Proof completed.
 < Prove exactEval:host:paramTy_is.

Proof completed.
 < Prove exactEval:host:getFunInfo_is.

Proof completed.
 < Prove exactEval:host:paramTy_exists.

Proof completed.
 < Prove exactEval:host:getFunInfo_exists.

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

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < case IsE.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < apply IH_C_E to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < apply IH_C_E to _ _ _ Ev2.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < search.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < case IsE.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < apply IH_C_E to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < apply IH_C_E to _ _ _ Ev2.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < search.

Subgoal 2.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_value V
 < case IsE.

Subgoal 2.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_value V
 < apply IH_C_E to _ _ _ Ev1.

Subgoal 2.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_value V
 < apply IH_V_E to _ _ _ Ev2.

Subgoal 2.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_value V
============================
 is_value V
 < search.

Subgoal 2.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_value V
 < case IsE.

Subgoal 2.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_value V
 < apply IH_C_E to _ _ _ Ev1.

Subgoal 2.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_value V
 < apply IH_V_E to _ _ _ Ev2.

Subgoal 2.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_C_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_E : forall FE EE EE' E V O,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
           is_value V
IH_C_S : forall FE EE EE' S O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_C_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list (is_list (is_pair is_string is_value)) EE'
IH_V_A : forall FE EE EE' A V O,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
           is_list is_value V
IH_C_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_list (is_pair is_string is_value)) EE'
IH_V_RF : forall FE EE EE' RF V O,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
            is_list (is_pair is_string is_value) V
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_value V
============================
 is_value V
 < search.

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

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_list is_value O
 < case IsE.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list is_value O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list is_value O
 < apply IH_E to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
============================
 is_list is_value O
 < apply IH_E to _ _ _ Ev2.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
H6 : is_list is_value O3
============================
 is_list is_value O
 < apply append_values_is to _ _ Ev3.

Subgoal 1.27:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
H6 : is_list is_value O3
H7 : is_list is_value O
============================
 is_list is_value O
 < search.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 is_list is_value O
 < case IsE.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 is_list is_value O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list is_value O
 < apply IH_E to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
============================
 is_list is_value O
 < apply IH_E to _ _ _ Ev2.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
H6 : is_list is_value O3
============================
 is_list is_value O
 < apply append_values_is to _ _ Ev3.

Subgoal 1.28:

Variables: FE EE EE' V O EE3 O2 O3 F T C
IH_E : forall FE EE EE' E V O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         is_list is_value O
IH_S : forall FE EE EE' S O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         is_list is_value O
IH_A : forall FE EE EE' A V O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         is_list is_value O
IH_RF : forall FE EE EE' RF V O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          is_list is_value O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list is_value O2
H6 : is_list is_value O3
H7 : is_list is_value O
============================
 is_list is_value O
 < search.

Proof completed.
 < Prove exactEval:host:paramName_is.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_is.

Proof completed.
 < Prove exactEval:host:evalProgram_isOutput.

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

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE EE'
 < case IsE.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 names_same EE EE'
 < NS1: apply IH_E to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
============================
 names_same EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE EE'
 < NS2: apply IH_E to _ _ _ Ev2.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS2 : names_same EE3 EE'
============================
 names_same EE EE'
 < apply names_same_transitive to NS1 NS2.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS2 : names_same EE3 EE'
H5 : names_same EE EE'
============================
 names_same EE EE'
 < search.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE EE'
 < case IsE.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 names_same EE EE'
 < NS1: apply IH_E to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
============================
 names_same EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE EE'
 < NS2: apply IH_E to _ _ _ Ev2.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS2 : names_same EE3 EE'
============================
 names_same EE EE'
 < apply names_same_transitive to NS1 NS2.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         names_same EE EE'
IH_S : forall S FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> evalStmt FE (Scope::EE) S EE' O * ->
         exists Scope' EE'', EE' = Scope'::EE'' /\ names_same EE EE''
IH_A : forall A FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A V EE' O * ->
         names_same EE EE'
IH_RF : forall RF FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF V EE' O * ->
          names_same EE EE'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
NS1 : names_same EE EE3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS2 : names_same EE3 EE'
H5 : names_same EE EE'
============================
 names_same EE EE'
 < search.

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

Subgoal 1.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 VA = VB
 < case IsE.

Subgoal 1.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 VA = VB
 < EvB: case EvB.

Subgoal 1.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 VA = VB
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 1.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 VA = VB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 1.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB
 < apply IH_V_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 1.27.1:

Variables: FE EE_A EE_B VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VB EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VB = VB
 < search.

Subgoal 1.27.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 VA = VB
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 1.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 VA = VB
 < case IsE.

Subgoal 1.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 VA = VB
 < EvB: case EvB.

Subgoal 1.28.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 VA = VB
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 1.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 VA = VB
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 1.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 VA = VB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 1.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB
 < apply IH_V_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 1.28.2:

Variables: FE EE_A EE_B VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VB EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VB = VB
 < search.

Subgoal 2.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 O_A = O_B
 < case IsE.

Subgoal 2.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 O_A = O_B
 < EvB: case EvB.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 O_A = O_B
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 O_A = O_B
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O_A = O_B
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply IH_O_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply IH_O_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O4 *
EvA3 : O3 ++ O4 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply append_unique to EvA3 EvB2.

Subgoal 2.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_B N Len EE1 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_B @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O4 *
EvA3 : O3 ++ O4 = O_B
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_B = O_B
 < search.

Subgoal 2.27.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 O_A = O_B
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 O_A = O_B
 < case IsE.

Subgoal 2.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 O_A = O_B
 < EvB: case EvB.

Subgoal 2.28.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 O_A = O_B
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 O_A = O_B
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 O_A = O_B
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O_A = O_B
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply IH_O_E to _ _ _ _ EvA1 EvB _.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply IH_O_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O4 *
EvA3 : O3 ++ O4 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_A = O_B
 < apply append_unique to EvA3 EvB2.

Subgoal 2.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_B N Len EE1 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_B @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O4 *
EvA3 : O3 ++ O4 = O_B
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O_B = O_B
 < search.

Subgoal 3.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 newNameScopes N Len EE_A' EE_B'
 < case IsE.

Subgoal 3.27:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 newNameScopes N Len EE_A' EE_B'
 < EvB: case EvB.

Subgoal 3.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 3.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 newNameScopes N Len EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 3.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 newNameScopes N Len EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 3.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_C_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 3.27.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
H7 : newNameScopes N Len EE_A' EE_B'
============================
 newNameScopes N Len EE_A' EE_B'
 < search.

Subgoal 3.27.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 3.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
============================
 newNameScopes N Len EE_A' EE_B'
 < case IsE.

Subgoal 3.28:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 newNameScopes N Len EE_A' EE_B'
 < EvB: case EvB.

Subgoal 3.28.1:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 3.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 3.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
============================
 newNameScopes N Len EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 3.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 newNameScopes N Len EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 3.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 newNameScopes N Len EE_A' EE_B'
 < apply IH_C_E to _ _ _ _ EvA2 EvB1 _.

Subgoal 3.28.2:

Variables: FE EE_A EE_B VA VB EE_A' EE_B' O_A O_B N Len EE1 O1 O2 F T C EE2 O3 O4
IH_V_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_E : forall FE EE_A EE_B E VA VB EE_A' EE_B' O_A O_B N Len,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalExpr FE EE_A E VA EE_A' O_A * -> evalExpr FE EE_B E VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_O_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_S : forall FE EE_A EE_B S EE_A' EE_B' O_A O_B N Len Scope,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
           evalStmt FE (Scope::EE_A) S EE_A' O_A * -> evalStmt FE (Scope::EE_B) S EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_A : forall FE EE_A EE_B A VA VB EE_A' EE_B' O_A O_B N Len,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           evalArgs FE EE_A A VA EE_A' O_A * -> evalArgs FE EE_B A VB EE_B' O_B ->
           newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IH_V_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> VA = VB
IH_O_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> O_A = O_B
IH_C_RF : forall FE EE_A EE_B RF VA VB EE_A' EE_B' O_A O_B N Len,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            evalRecFields FE EE_A RF VA EE_A' O_A * -> evalRecFields FE EE_B RF VB EE_B' O_B ->
            newNameScopes N Len EE_A EE_B -> newNameScopes N Len EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = O_A
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = O_B
H4 : newNameScopes N Len EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE2
H7 : newNameScopes N Len EE_A' EE_B'
============================
 newNameScopes N Len EE_A' EE_B'
 < search.

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

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

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

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < case IsE.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvA1: apply IH_E to _ _ _ _ EvB3 NNS.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvA1': apply drop_ext_size_evalExpr to EvA1.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvB1': apply drop_ext_size_evalExpr to EvB3.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
EvB1' : evalExpr FE EE_B C trueVal EE1 O2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA1' EvB1' NNS.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
EvB1' : evalExpr FE EE_B C trueVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply evalExpr_isCtx to _ _ _ EvA1'.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
EvB1' : evalExpr FE EE_B C trueVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply evalExpr_isCtx to _ _ _ EvB1'.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
EvB1' : evalExpr FE EE_B C trueVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply IH_E to _ _ _ _ EvB4 NNS'.

Subgoal 1.27:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A' EE_A'1
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C trueVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 T V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C trueVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C trueVal EE_A' O2
EvB1' : evalExpr FE EE_B C trueVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : <evalExpr {ES}> FE EE_A' T V EE_A'1 O3 N3
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < search.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < case IsE.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvA1: apply IH_E to _ _ _ _ EvB3 NNS.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvA1': apply drop_ext_size_evalExpr to EvA1.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < EvB1': apply drop_ext_size_evalExpr to EvB3.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
EvB1' : evalExpr FE EE_B C falseVal EE1 O2
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA1' EvB1' NNS.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
EvB1' : evalExpr FE EE_B C falseVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply evalExpr_isCtx to _ _ _ EvA1'.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
EvB1' : evalExpr FE EE_B C falseVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply evalExpr_isCtx to _ _ _ EvB1'.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A'
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
EvB1' : evalExpr FE EE_B C falseVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < apply IH_E to _ _ _ _ EvB4 NNS'.

Subgoal 1.28:

Variables: FE EE_A EE_B V EE_B' O N Len ES N2 N3 N4 EE1 O2 O3 F T C EE_A' EE_A'1
IH_E : forall FE EE_A EE_B E V EE_B' O N Len ES,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalExpr {ES}> FE EE_B E V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalExpr {ES}> FE EE_A E V EE_A' O ES
IH_S : forall FE EE_A EE_B S EE_B' O N Len Scope ES,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         <evalStmt {ES}> FE (Scope::EE_B) S EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) S EE_A' O ES
IH_A : forall FE EE_A EE_B A V EE_B' O N Len ES,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         <evalArgs {ES}> FE EE_B A V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
         exists EE_A', <evalArgs {ES}> FE EE_A A V EE_A' O ES
IH_RF : forall FE EE_A EE_B RF V EE_B' O N Len ES,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          <evalRecFields {ES}> FE EE_B RF V EE_B' O ES * -> newNameScopes N Len EE_A EE_B ->
          exists EE_A', <evalRecFields {ES}> FE EE_A RF V EE_A' O ES
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
EvB : <evalExpr {ES}> FE EE_B (condExpr C T F) V EE_B' O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N4 = ES
EvB2 : N2 + N3 = N4
EvB3 : <evalExpr {ES}> FE EE_B C falseVal EE1 O2 N2 *
EvB4 : <evalExpr {ES}> FE EE1 F V EE_B' O3 N3 *
EvB5 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvA1 : <evalExpr {ES}> FE EE_A C falseVal EE_A' O2 N2
EvA1' : evalExpr FE EE_A C falseVal EE_A' O2
EvB1' : evalExpr FE EE_B C falseVal EE1 O2
NNS' : newNameScopes N Len EE_A' EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE_A'
H5 : is_list (is_list (is_pair is_string is_value)) EE1
H6 : <evalExpr {ES}> FE EE_A' F V EE_A'1 O3 N3
============================
 exists EE_A', <evalExpr {ES}> FE EE_A (condExpr C T F) V EE_A' O ES
 < search.

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

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) N
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Ctx
 < case IsE.

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) N
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 ctx_names EE' Ctx
 < EN: case EN.

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
============================
 ctx_names EE' Ctx
 < Ctxs': apply IH_E to _ _ _ _ Ctxs EN Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
============================
 ctx_names EE' Ctx
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Ctx
 < apply IH_E to _ _ _ _ Ctxs' EN1 Ev2.

Subgoal 1.27:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : ctx_names EE' Ctx
============================
 ctx_names EE' Ctx
 < search.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) N
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Ctx
 < case IsE.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) N
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 ctx_names EE' Ctx
 < EN: case EN.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
============================
 ctx_names EE' Ctx
 < Ctxs': apply IH_E to _ _ _ _ Ctxs EN Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
============================
 ctx_names EE' Ctx
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Ctx
 < apply IH_E to _ _ _ _ Ctxs' EN2 Ev2.

Subgoal 1.28:

Variables: FE EE V EE' O Ctx N EE3 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE E V EE' O Ctx N,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> exprNames Ctx E N -> evalExpr FE EE E V EE' O * -> ctx_names EE' Ctx
IH_S : forall FE EE S EE' O Ctx Ctx' N,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> stmtNames Ctx S N Ctx' -> evalStmt FE EE S EE' O * ->
         ctx_names EE' Ctx'
IH_A : forall FE EE A V EE' O Ctx N,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
         ctx_names EE Ctx -> argsNames Ctx A N -> evalArgs FE EE A V EE' O * -> ctx_names EE' Ctx
IH_RF : forall FE EE RF V EE' O Ctx N,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Ctx ->
          ctx_names EE Ctx -> recFieldNames Ctx RF N -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Ctx
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = N
Ctxs' : ctx_names EE3 Ctx
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : ctx_names EE' Ctx
============================
 ctx_names EE' Ctx
 < search.

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

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsE : is_expr (condExpr C T 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
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
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EN : exprNames Ctx (condExpr C T F) []
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case IsE.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EN : exprNames Ctx (condExpr C T F) []
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EN: case EN.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case EN4.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C CN TN
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F []
EN3 : CN ++ TN = []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case EN3.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EvB1: apply IH_E to _ _ _ _ _ _ EN EvA1 NNS.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA1 EvB1 NNS.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_ctx_names to _ _ _ _ Ctxs EN EvB1.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
H6 : ctx_names EE_B' Ctx
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply IH_E to _ _ _ _ _ _ EN1 EvA2 NNS'.

Subgoal 1.27:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B' EE_B'1
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
H6 : ctx_names EE_B' Ctx
H7 : evalExpr FE EE_B' T V EE_B'1 O3
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < search.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsE : is_expr (condExpr C T 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
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
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EN : exprNames Ctx (condExpr C T F) []
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case IsE.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EN : exprNames Ctx (condExpr C T F) []
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EN: case EN.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C CN TN FN N2
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N2
EN4 : N2 ++ FN = []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case EN4.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C CN TN
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F []
EN3 : CN ++ TN = []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case EN3.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EvB1: apply IH_E to _ _ _ _ _ _ EN EvA1 NNS.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA1 EvB1 NNS.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_ctx_names to _ _ _ _ Ctxs EN EvB1.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B'
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
H6 : ctx_names EE_B' Ctx
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply IH_E to _ _ _ _ _ _ EN2 EvA2 NNS'.

Subgoal 1.28:

Variables: FE EE_A EE_B V Ctx EE_A' O N Len EE1 O2 O3 F T C EE_B' EE_B'1
IH_E : forall FE EE_A EE_B E V Ctx EE_A' O N Len,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> exprNames Ctx E [] ->
         evalExpr FE EE_A E V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall FE EE_A EE_B S Ctx Ctx' EE_A' O N Len Scope,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE_A) -> is_list (is_list (is_pair is_string is_value)) (Scope::EE_B) ->
         is_list (is_list is_string) Ctx -> ctx_names (Scope::EE_B) Ctx -> stmtNames Ctx S [] Ctx' ->
         evalStmt FE (Scope::EE_A) S EE_A' O * -> newNameScopes N Len EE_A EE_B ->
         exists EE_B', evalStmt FE (Scope::EE_B) S EE_B' O
IH_A : forall FE EE_A EE_B A V Ctx EE_A' O N Len,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> argsNames Ctx A [] ->
         evalArgs FE EE_A A V EE_A' O * -> newNameScopes N Len EE_A EE_B -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall FE EE_A EE_B RF V Ctx EE_A' O N Len,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          is_list (is_list is_string) Ctx -> ctx_names EE_B Ctx -> recFieldNames Ctx RF [] ->
          evalRecFields FE EE_A RF V EE_A' O * -> newNameScopes N Len EE_A EE_B ->
          exists EE_B', evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE_B Ctx
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes N Len EE1 EE_B'
H6 : ctx_names EE_B' Ctx
H7 : evalExpr FE EE_B' F V EE_B'1 O3
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < search.

Proof completed.
 < Theorem append_values_total :
     forall LA LB, is_list is_value LA -> exists L, LA ++ LB = L.

============================
 forall LA LB, is_list is_value LA -> exists L, LA ++ LB = L
 < induction on 1.

IH : forall LA LB, is_list is_value LA * -> exists L, LA ++ LB = L
============================
 forall LA LB, is_list is_value LA @ -> exists L, LA ++ LB = L
 < intros Is.

Variables: LA LB
IH : forall LA LB, is_list is_value LA * -> exists L, LA ++ LB = L
Is : is_list is_value LA @
============================
 exists L, LA ++ LB = L
 < Is: case Is.

Subgoal 1:

Variables: LB
IH : forall LA LB, is_list is_value LA * -> exists L, LA ++ LB = L
============================
 exists L, [] ++ LB = L
 < search.

Subgoal 2:

Variables: LB T H
IH : forall LA LB, is_list is_value LA * -> exists L, LA ++ LB = L
Is : is_value H
Is1 : is_list is_value T *
============================
 exists L, H::T ++ LB = L
 < apply IH to Is1 with
     LB = LB.

Subgoal 2:

Variables: LB T H L
IH : forall LA LB, is_list is_value LA * -> exists L, LA ++ LB = L
Is : is_value H
Is1 : is_list is_value T *
H1 : T ++ LB = L
============================
 exists L, H::T ++ LB = L
 < search.

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

Subgoal 1.27:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 VA = VB /\ OA = OB
 < case IsE.

Subgoal 1.27:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 VA = VB /\ OA = OB
 < EvB: case EvB.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB /\ OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB /\ OA = OB
 < SS': apply IH_E_C to _ _ _ _ _ EvA1 EvB.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
============================
 VA = VB /\ OA = OB
 < apply scopes_same_add_scope to SS'.

Subgoal 1.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA2 EvB1.

Subgoal 1.27.1:

Variables: FE EE_A EE_A' OA EE_B VB EE_B' OB EE1 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VB EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VB = VB /\ OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 1.27.1:

Variables: FE EE_A EE_A' EE_B VB EE_B' OB EE1 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' OB @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VB EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VB = VB /\ OB = OB
 < search.

Subgoal 1.27.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 1.28:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 VA = VB /\ OA = OB
 < case IsE.

Subgoal 1.28:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 VA = VB /\ OA = OB
 < EvB: case EvB.

Subgoal 1.28.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB /\ OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB /\ OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB /\ OA = OB
 < SS': apply IH_E_C to _ _ _ _ _ EvA1 EvB.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
============================
 VA = VB /\ OA = OB
 < apply scopes_same_add_scope to SS'.

Subgoal 1.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VA = VB /\ OA = OB
 < apply IH_E to _ _ _ _ _ EvA2 EvB1.

Subgoal 1.28.2:

Variables: FE EE_A EE_A' OA EE_B VB EE_B' OB EE1 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VB EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VB = VB /\ OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 1.28.2:

Variables: FE EE_A EE_A' EE_B VB EE_B' OB EE1 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VB EE_A' OB @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VB EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 VB = VB /\ OB = OB
 < search.

Subgoal 2.27:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 scopes_same EE_A' EE_B'
 < case IsE.

Subgoal 2.27:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 scopes_same EE_A' EE_B'
 < EvB: case EvB.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 scopes_same EE_A' EE_B'
 < SS': apply IH_E_C to _ _ _ _ _ EvA1 EvB.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
============================
 scopes_same EE_A' EE_B'
 < apply scopes_same_add_scope to SS'.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 scopes_same EE_A' EE_B'
 < SS'': apply IH_E_C to _ _ _ _ _ EvA2 EvB1.

Subgoal 2.27.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
SS'' : scopes_same EE_A' EE_B'
============================
 scopes_same EE_A' EE_B'
 < search.

Subgoal 2.27.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 T VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 2.28:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 scopes_same EE_A' EE_B'
 < case IsE.

Subgoal 2.28:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvB : evalExpr FE EE_B (condExpr C T F) VB EE_B' OB
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 scopes_same EE_A' EE_B'
 < EvB: case EvB.

Subgoal 2.28.1:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C trueVal EE2 O3
EvB1 : evalExpr FE EE2 T VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 scopes_same EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 scopes_same EE_A' EE_B'
 < SS': apply IH_E_C to _ _ _ _ _ EvA1 EvB.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
============================
 scopes_same EE_A' EE_B'
 < apply scopes_same_add_scope to SS'.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
============================
 scopes_same EE_A' EE_B'
 < SS'': apply IH_E_C to _ _ _ _ _ EvA2 EvB1.

Subgoal 2.28.2:

Variables: FE EE_A VA EE_A' OA EE_B VB EE_B' OB EE1 O2 F T C EE2 O3 O4
IH_E : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_E_C : forall E FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_S : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
         OA = OB
IH_S_C : forall S FE EE_A EE_A' OA EE_B EE_B' OB,
           is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' OA * -> evalStmt FE EE_B S EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_A : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         VA = VB /\ OA = OB
IH_A_C : forall A FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
           is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           scopes_same EE_A EE_B -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           scopes_same EE_A' EE_B'
IH_RF : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
          VA = VB /\ OA = OB
IH_RF_C : forall RF FE EE_A VA EE_A' OA EE_B VB EE_B' OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            scopes_same EE_A EE_B -> evalRecFields FE EE_A RF VA EE_A' OA * -> evalRecFields FE EE_B RF VB EE_B' OB ->
            scopes_same EE_A' EE_B'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A C falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 F VA EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB : evalExpr FE EE_B C falseVal EE2 O3
EvB1 : evalExpr FE EE2 F VB EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
SS' : scopes_same EE1 EE2
H6 : scopes_same ([]::EE1) ([]::EE2)
SS'' : scopes_same EE_A' EE_B'
============================
 scopes_same EE_A' EE_B'
 < search.

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

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case IsE.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EvB1: apply IH_E to _ _ _ _ SS EvA1.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < SS': apply evalExpr_scopes_same_ctx to _ _ _ _ _ EvA1 EvB1.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
SS' : scopes_same EE1 EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply IH_E to _ _ _ _ SS' EvA2.

Subgoal 1.27:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B' EE_B'1
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C trueVal EE1 O2 *
EvA2 : evalExpr FE EE1 T V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C trueVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : evalExpr FE EE_B' T V EE_B'1 O3
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < search.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsE : is_expr (condExpr C T 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
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < case IsE.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < EvB1: apply IH_E to _ _ _ _ SS EvA1.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < SS': apply evalExpr_scopes_same_ctx to _ _ _ _ _ EvA1 EvB1.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
SS' : scopes_same EE1 EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B'
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < apply IH_E to _ _ _ _ SS' EvA2.

Subgoal 1.28:

Variables: FE EE_A V EE_A' O EE_B EE1 O2 O3 F T C EE_B' EE_B'1
IH_E : forall E FE EE_A V EE_A' O EE_B,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalExpr FE EE_A E V EE_A' O * -> exists EE_B',
           evalExpr FE EE_B E V EE_B' O
IH_S : forall S FE EE_A EE_A' O EE_B,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalStmt FE EE_A S EE_A' O * -> exists EE_B',
           evalStmt FE EE_B S EE_B' O
IH_A : forall A FE EE_A V EE_A' O EE_B,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         scopes_same EE_A EE_B -> evalArgs FE EE_A A V EE_A' O * -> exists EE_B',
           evalArgs FE EE_B A V EE_B' O
IH_RF : forall RF FE EE_A V EE_A' O EE_B,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          scopes_same EE_A EE_B -> evalRecFields FE EE_A RF V EE_A' O * -> exists EE_B',
            evalRecFields FE EE_B RF V EE_B' O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) EE_B
SS : scopes_same EE_A EE_B
EvA : evalExpr FE EE_A (condExpr C T F) V EE_A' O @
EvA1 : evalExpr FE EE_A C falseVal EE1 O2 *
EvA2 : evalExpr FE EE1 F V EE_A' O3 *
EvA3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EvB1 : evalExpr FE EE_B C falseVal EE_B' O2
SS' : scopes_same EE1 EE_B'
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : evalExpr FE EE_B' F V EE_B'1 O3
============================
 exists EE_B', evalExpr FE EE_B (condExpr C T F) V EE_B' O
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_forward.

Variables: Names FE EE V EE' O X F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < L: apply length_exists_list_pair_string_value to IsEE.

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvD: assert evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) [].

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS: assert newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE.

Subgoal 1:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
 < unfold .

Subgoal 1:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 exists N1 SNames BNames,
   ((((length EE N /\ drop N1 ([(X, intVal 0)]::EE) EE) /\
   take N1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
   names [[(X, intVal 0)]] SNames) /\
   names EE BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 1,
   [X],
   Names.

Subgoal 1:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 ((((length EE N /\ drop 1 ([(X, intVal 0)]::EE) EE) /\
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
 names [[(X, intVal 0)]] [X]) /\
 names EE Names) /\
 (forall X1, mem X1 [X] -> mem X1 Names -> false)
 < split.

Subgoal 1.1:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 length EE N
 < search.

Subgoal 1.2:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 drop 1 ([(X, intVal 0)]::EE) EE
 < search.

Subgoal 1.3:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]
 < search.

Subgoal 1.4:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names [[(X, intVal 0)]] [X]
 < search.

Subgoal 1.5:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names EE Names
 < search.

Subgoal 1.6:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 forall X1, mem X1 [X] -> mem X1 Names -> false
 < intros MX MN.

Subgoal 1.6:

Variables: Names FE EE V EE' O X F T C N X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MX : mem X1 [X]
MN : mem X1 Names
============================
 false
 < MX: case MX.

Subgoal 1.6.1:

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X Names
============================
 false
 < apply fresh_name_not_mem to Pr1 MN.

Subgoal 1.6.2:

Variables: Names FE EE V EE' O X F T C N X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X1 Names
MX : mem X1 []
============================
 false
 < case MX.

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < IsX: apply fresh_name_is to _ Pr1.

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Is: case IsE.

Variables: Names FE EE V EE' O X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Ev: case Ev.

Subgoal 2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < assert is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE)).

Subgoal 2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
 < search 6.

Subgoal 2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA: apply evalExpr_newNameScopes_exists to _ _ _ _ Ev NNS.

Subgoal 2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA Ev _.

Subgoal 2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] N EE_A' EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS': case NNS' (keep).

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A' N1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] N EE_A' EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 EE_A' EE3
NNS'3 : take N1 EE_A' [[(X, intVal 0)]]
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Take: case NNS'3.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 N1 SNames BNames N2 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N2 = N1
Take1 : take N2 L []
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Take1.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 N1 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute Take.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Eq: assert L = EE3.

Subgoal 2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 L = EE3
 < Drop: case NNS'2.

Subgoal 2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N3 = 1
Drop1 : drop N3 L EE3
============================
 L = EE3
 < apply drop_is_integer to Drop1.

Subgoal 2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N3 = 1
Drop1 : drop N3 L EE3
H3 : is_integer N3
============================
 L = EE3
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE3
H3 : is_integer 0
============================
 L = EE3
 < Drop: case Drop1.

Subgoal 2.2.1.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
============================
 EE3 = EE3
 < search.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
============================
 X1::L1 = EE3
 < P: assert 1 + -1 = 0.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
P : 1 + -1 = 0
============================
 X1::L1 = EE3
 < apply drop_is_integer to Drop2.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
P : 1 + -1 = 0
H4 : is_integer N4
============================
 X1::L1 = EE3
 < apply plus_integer_unique_addend to _ _ _ Drop1 P.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
============================
 X1::L1 = EE3
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
GEq : -1 >= 0
============================
 X1::L1 = EE3
 < LEq: case GEq.

Subgoal 2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
LEq : 0 <= -1
============================
 X1::L1 = EE3
 < case LEq.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Eq : L = EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Eq.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS'': assert newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA2: apply evalExpr_newNameScopes_exists to _ _ _ _ Ev1 NNS''.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS''': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA2 Ev1 _.

Subgoal 2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N EE_A'1 EE'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS''': case NNS'''.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1 N3 SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
NNS''' : length EE' N
NNS'''1 : drop N3 EE_A'1 EE'
NNS'''2 : take N3 EE_A'1 [[], [(X, intVal 0)]]
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < T: case NNS'''2.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::L1) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::L1) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : take N4 L1 [[(X, intVal 0)]]
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < T: case T1.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 N6 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : 1 + N6 = N4
T2 : take N6 L2 []
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case T2.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : 1 + 0 = N4
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute T1.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = N3
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute T.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Eq: assert L2 = EE'.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 L2 = EE'
 < Drop: case NNS'''1.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N7
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N7 = 2
Drop1 : drop N7 ([(X, intVal 0)]::L2) EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop1.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N7
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N7 = 2
Drop1 : drop N7 ([(X, intVal 0)]::L2) EE'
H4 : is_integer N7
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T Drop.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : drop 1 ([(X, intVal 0)]::L2) EE'
H4 : is_integer 1
============================
 L2 = EE'
 < Drop: case Drop1.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N8
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + N8 = 1
Drop2 : drop N8 L2 EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop2.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N8
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + N8 = 1
Drop2 : drop N8 L2 EE'
H5 : is_integer N8
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T1 Drop1.

Subgoal 2.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L2 EE'
H5 : is_integer 0
============================
 L2 = EE'
 < Drop: case Drop2.

Subgoal 2.2.2.1.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
============================
 EE' = EE'
 < search.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
============================
 X1::L3 = EE'
 < P: assert 1 + -1 = 0.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
P : 1 + -1 = 0
============================
 X1::L3 = EE'
 < apply drop_is_integer to Drop3.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
P : 1 + -1 = 0
H6 : is_integer N11
============================
 X1::L3 = EE'
 < apply plus_integer_unique_addend to _ _ _ P Drop2.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
============================
 X1::L3 = EE'
 < GEq: apply drop_geq_0 to Drop3.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
GEq : -1 >= 0
============================
 X1::L3 = EE'
 < LEq: case GEq.

Subgoal 2.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
LEq : 0 <= -1
============================
 X1::L3 = EE'
 < case LEq.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Eq : L2 = EE'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Eq.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < assert replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE')).

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA3: assert evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < exists EE'.

Subgoal 2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O /\
 scopes_same EE' EE'
 < split.

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA.

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA2.

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < IsO: apply append_values_is to _ _ Ev2.

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value O
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < App: apply append_values_total to IsO with
          LB = [].

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value O
App : O ++ [] = L3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply append_nil_right to App.

Subgoal 2.2.2.2:

Variables: Names FE EE V EE' X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = L3
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value L3
App : L3 ++ [] = L3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' L3
 < search.

Subgoal 2.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 scopes_same EE' EE'
 < backchain scopes_same_reflexive.

Subgoal 2.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': apply evalStmt_isCtx to _ _ _ EvA3.

Subgoal 2.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_list (is_pair is_string is_value)) ([]::([(X, V)]::EE'))
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': case Is'.

Subgoal 2.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_pair is_string is_value) []
Is'1 : is_list (is_list (is_pair is_string is_value)) ([(X, V)]::EE')
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': case Is'1.

Subgoal 2.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_pair is_string is_value) []
Is'1 : is_list (is_pair is_string is_value) [(X, V)]
Is'2 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < search.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenEE3: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev1 LenEE3.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenSBR : length (S::BR) N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenBR: case LenSBR.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < apply length_is to LenBR.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LEq: apply newNameScopes_length to NNS''' LenBR.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
LEq : N <= N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 2.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
LEq : N <= N'
Less : N' < N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenSBR : length (S::BR) N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LenBR: case LenSBR.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply length_is to LenBR.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LEq: apply newNameScopes_length to NNS'1 LenBR.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
LEq : N <= N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 2.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
LEq : N <= N'
Less : N' < N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < assert is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE)).

Subgoal 3.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
 < search 6.

Subgoal 3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA: apply evalExpr_newNameScopes_exists to _ _ _ _ Ev NNS.

Subgoal 3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA Ev _.

Subgoal 3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] N EE_A' EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS': case NNS' (keep).

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 EE_A' N1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] N EE_A' EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 EE_A' EE3
NNS'3 : take N1 EE_A' [[(X, intVal 0)]]
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Take: case NNS'3.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 N1 SNames BNames N2 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N2 = N1
Take1 : take N2 L []
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Take1.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 N1 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute Take.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Eq: assert L = EE3.

Subgoal 3.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 L = EE3
 < Drop: case NNS'2.

Subgoal 3.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N3 = 1
Drop1 : drop N3 L EE3
============================
 L = EE3
 < apply drop_is_integer to Drop1.

Subgoal 3.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L N3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N3 = 1
Drop1 : drop N3 L EE3
H3 : is_integer N3
============================
 L = EE3
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 3.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE3
H3 : is_integer 0
============================
 L = EE3
 < Drop: case Drop1.

Subgoal 3.2.1.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
============================
 EE3 = EE3
 < search.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
============================
 X1::L1 = EE3
 < P: assert 1 + -1 = 0.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
P : 1 + -1 = 0
============================
 X1::L1 = EE3
 < apply drop_is_integer to Drop2.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N4 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + N4 = 0
Drop2 : drop N4 L1 EE3
P : 1 + -1 = 0
H4 : is_integer N4
============================
 X1::L1 = EE3
 < apply plus_integer_unique_addend to _ _ _ Drop1 P.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
============================
 X1::L1 = EE3
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
GEq : -1 >= 0
============================
 X1::L1 = EE3
 < LEq: case GEq.

Subgoal 3.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 N
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H3 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H4 : is_integer -1
LEq : 0 <= -1
============================
 X1::L1 = EE3
 < case LEq.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Eq : L = EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Eq.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS'': assert newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA2: apply evalExpr_newNameScopes_exists to _ _ _ _ Ev1 NNS''.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS''': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA2 Ev1 _.

Subgoal 3.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N EE_A'1 EE'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < NNS''': case NNS'''.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames EE_A'1 N3 SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
NNS''' : length EE' N
NNS'''1 : drop N3 EE_A'1 EE'
NNS'''2 : take N3 EE_A'1 [[], [(X, intVal 0)]]
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < T: case NNS'''2.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::L1) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::L1) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : take N4 L1 [[(X, intVal 0)]]
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < T: case T1.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 N6 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : 1 + N6 = N4
T2 : take N6 L2 []
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case T2.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 N4 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N4 = N3
T1 : 1 + 0 = N4
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute T1.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames N3 SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop N3 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = N3
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < compute T.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Eq: assert L2 = EE'.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 L2 = EE'
 < Drop: case NNS'''1.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N7
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N7 = 2
Drop1 : drop N7 ([(X, intVal 0)]::L2) EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop1.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N7
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N7 = 2
Drop1 : drop N7 ([(X, intVal 0)]::L2) EE'
H4 : is_integer N7
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T Drop.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : drop 1 ([(X, intVal 0)]::L2) EE'
H4 : is_integer 1
============================
 L2 = EE'
 < Drop: case Drop1.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N8
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + N8 = 1
Drop2 : drop N8 L2 EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop2.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2 N8
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + N8 = 1
Drop2 : drop N8 L2 EE'
H5 : is_integer N8
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T1 Drop1.

Subgoal 3.2.2.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L2 EE'
H5 : is_integer 0
============================
 L2 = EE'
 < Drop: case Drop2.

Subgoal 3.2.2.1.1:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
============================
 EE' = EE'
 < search.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
============================
 X1::L3 = EE'
 < P: assert 1 + -1 = 0.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
P : 1 + -1 = 0
============================
 X1::L3 = EE'
 < apply drop_is_integer to Drop3.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 N11 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + N11 = 0
Drop3 : drop N11 L3 EE'
P : 1 + -1 = 0
H6 : is_integer N11
============================
 X1::L3 = EE'
 < apply plus_integer_unique_addend to _ _ _ P Drop2.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
============================
 X1::L3 = EE'
 < GEq: apply drop_geq_0 to Drop3.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
GEq : -1 >= 0
============================
 X1::L3 = EE'
 < LEq: case GEq.

Subgoal 3.2.2.1.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' N
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H4 : is_integer 1
Drop1 : 1 + 0 = 1
H5 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H6 : is_integer -1
LEq : 0 <= -1
============================
 X1::L3 = EE'
 < case LEq.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L2
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Eq : L2 = EE'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < case Eq.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < assert replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE')).

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < EvA3: assert evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < exists EE'.

Subgoal 3.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O /\
 scopes_same EE' EE'
 < split.

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA.

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA2.

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < IsO: apply append_values_is to _ _ Ev2.

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value O
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < App: apply append_values_total to IsO with
          LB = [].

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value O
App : O ++ [] = L3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply append_nil_right to App.

Subgoal 3.2.2.2:

Variables: Names FE EE V EE' X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1 L3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = L3
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H5 : is_list is_value O2
H6 : is_list is_value O3
IsO : is_list is_value L3
App : L3 ++ [] = L3
============================
 evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' L3
 < search.

Subgoal 3.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 scopes_same EE' EE'
 < backchain scopes_same_reflexive.

Subgoal 3.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': apply evalStmt_isCtx to _ _ _ EvA3.

Subgoal 3.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_list (is_pair is_string is_value)) ([]::([(X, V)]::EE'))
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': case Is'.

Subgoal 3.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_pair is_string is_value) []
Is'1 : is_list (is_list (is_pair is_string is_value)) ([(X, V)]::EE')
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < Is': case Is'1.

Subgoal 3.2.2.3:

Variables: Names FE EE V EE' O X F T C N EE3 O2 O3 SNames BNames SNames1 BNames1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' N
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H4 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3 : evalStmt FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
Is' : is_list (is_pair is_string is_value) []
Is'1 : is_list (is_pair is_string is_value) [(X, V)]
Is'2 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 is_list (is_list (is_pair is_string is_value)) EE'
 < search.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenEE3: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev1 LenEE3.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenSBR : length (S::BR) N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LenBR: case LenSBR.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < apply length_is to LenBR.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < LEq: apply newNameScopes_length to NNS''' LenBR.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
LEq : N <= N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 3.2.3:

Variables: Names FE EE V O X F T C N EE3 O2 O3 SNames BNames BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) EE3
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 N
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H3 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] N ([]::([(X, intVal 0)]::EE3)) EE3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenEE3 : length EE3 N
LenBR : length BR N'
LenBR1 : 1 + N' = N
H4 : is_integer N'
LEq : N <= N'
Less : N' < N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same (S::BR) EE''
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenSBR : length (S::BR) N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LenBR: case LenSBR.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply length_is to LenBR.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < LEq: apply newNameScopes_length to NNS'1 LenBR.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
LEq : N <= N'
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 3.3:

Variables: Names FE EE V EE' O X F T C N O2 O3 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Pr1 : fresh_name "X" Names X
L : length EE N
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Is : is_expr C
Is1 : is_expr T
Is2 : is_expr F
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
Ev2 : O2 ++ O3 = O
H1 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H2 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] N (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H3 : is_integer N'
LEq : N <= N'
Less : N' < N
============================
 exists EE'',
   evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE'' O /\
   scopes_same EE' EE''
 < apply less_lesseq_flip_false to Less LEq.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_backward.

Variables: Names FE EE V EE' O Ctx X F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) []
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case IsE.

Variables: Names FE EE V EE' O Ctx X F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
EN : exprNames Ctx (condExpr C T F) []
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EN: case EN.

Variables: Names FE EE V EE' O Ctx X F T C CN TN FN N1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F FN
EN3 : CN ++ TN = N1
EN4 : N1 ++ FN = []
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case EN4.

Variables: Names FE EE V EE' O Ctx X F T C CN TN
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C CN
EN1 : exprNames Ctx T TN
EN2 : exprNames Ctx F []
EN3 : CN ++ TN = []
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case EN3.

Variables: Names FE EE V EE' O Ctx X F T C
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < L: apply length_exists_list_pair_string_value to IsEE.

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < NNS: assert newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE.

Subgoal 1:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
 < unfold .

Subgoal 1:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 exists N1 SNames BNames,
   ((((length EE N /\ drop N1 ([(X, intVal 0)]::EE) EE) /\
   take N1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
   names [[(X, intVal 0)]] SNames) /\
   names EE BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 1,
   [X],
   Names.

Subgoal 1:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 ((((length EE N /\ drop 1 ([(X, intVal 0)]::EE) EE) /\
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
 names [[(X, intVal 0)]] [X]) /\
 names EE Names) /\
 (forall X1, mem X1 [X] -> mem X1 Names -> false)
 < split.

Subgoal 1.1:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 length EE N
 < search.

Subgoal 1.2:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 drop 1 ([(X, intVal 0)]::EE) EE
 < search.

Subgoal 1.3:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]
 < search.

Subgoal 1.4:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 names [[(X, intVal 0)]] [X]
 < search.

Subgoal 1.5:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 names EE Names
 < search.

Subgoal 1.6:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
============================
 forall X1, mem X1 [X] -> mem X1 Names -> false
 < intros MX MN.

Subgoal 1.6:

Variables: Names FE EE V EE' O Ctx X F T C N X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
MX : mem X1 [X]
MN : mem X1 Names
============================
 false
 < MX: case MX.

Subgoal 1.6.1:

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
MN : mem X Names
============================
 false
 < apply fresh_name_not_mem to Pr1 MN.

Subgoal 1.6.2:

Variables: Names FE EE V EE' O Ctx X F T C N X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
MN : mem X1 Names
MX : mem X1 []
============================
 false
 < case MX.

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < IsX: apply fresh_name_is to _ Pr1.

Variables: Names FE EE V EE' O Ctx X F T C N
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Ev : evalExpr FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev.

Variables: Names FE EE V EE' O Ctx X F T C N EE3 O2 Scope O3
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalStmt FE ([]::EE) (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) EE3 O2
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev.

Variables: Names FE EE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE1 O1 O4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalStmt FE ([]::EE) (declare intTy X (num 0)) EE1 O1
Ev3 : evalStmt FE EE1 (ifThenElse C (assign X T) (assign X F)) EE3 O4
Ev4 : O1 ++ O4 = O2
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev.

Variables: Names FE EE V EE' O Ctx X F T C N EE3 O2 Scope O3 O1 O4 EE4 Scope1 V1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev3 : evalStmt FE (((X, V1)::Scope1)::EE4) (ifThenElse C (assign X T) (assign X F)) EE3 O4
Ev4 : O1 ++ O4 = O2
Ev : evalExpr FE ([]::EE) (num 0) V1 (Scope1::EE4) O1
============================
 exists EE'', evalExpr FE EE (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case Ev.

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 O4 EE4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev3 : evalStmt FE ([(X, intVal 0)]::EE4) (ifThenElse C (assign X T) (assign X F)) EE3 O4
Ev4 : [] ++ O4 = O2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case Ev4.

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev3 : evalStmt FE ([(X, intVal 0)]::EE4) (ifThenElse C (assign X T) (assign X F)) EE3 O2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev3.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvC: apply evalExpr_newNameScopes_exists_back to _ _ _ _ _ Ctxs EN Ev NNS.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ EvC.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev EvC NNS.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_ctx_names to _ _ _ _ Ctxs EN EvC.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X T) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev3.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < LenEE_B': apply evalExpr_keep_scopes to _ _ _ EvC L.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < NNS2: assert newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'.

Subgoal 2.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
 < NNS': case NNS'.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 EE2 EE_B'
NNS'2 : take N2 EE2 [[(X, intVal 0)]]
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
 < unfold .

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 EE2 EE_B'
NNS'2 : take N2 EE2 [[(X, intVal 0)]]
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::EE2) EE_B') /\
   take N1 ([]::EE2) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Take: case NNS'2.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L []
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < case Take1.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N2
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < compute Take.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop 1 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Drop: case NNS'1.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N4 = 1
Drop1 : drop N4 L EE_B'
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < apply drop_is_integer to Drop1.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N4 = 1
Drop1 : drop N4 L EE_B'
H7 : is_integer N4
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE_B'
H7 : is_integer 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Drop: case Drop1.

Subgoal 2.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::EE_B')) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 2,
   [X],
   BNames.

Subgoal 2.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 ((((length EE_B' N /\ drop 2 ([]::([(X, intVal 0)]::EE_B')) EE_B') /\
 take 2 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]) /\
 names [[], [(X, intVal 0)]] [X]) /\
 names EE_B' BNames) /\
 (forall X1, mem X1 [X] -> mem X1 BNames -> false)
 < split.

Subgoal 2.1.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 length EE_B' N
 < search.

Subgoal 2.1.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 drop 2 ([]::([(X, intVal 0)]::EE_B')) EE_B'
 < search.

Subgoal 2.1.1.1.3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 take 2 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]
 < search.

Subgoal 2.1.1.1.4:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 names [[], [(X, intVal 0)]] [X]
 < search.

Subgoal 2.1.1.1.5:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 names EE_B' BNames
 < search.

Subgoal 2.1.1.1.6:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 forall X1, mem X1 [X] -> mem X1 BNames -> false
 < intros MX MB.

Subgoal 2.1.1.1.6:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MX : mem X1 [X]
MB : mem X1 BNames
============================
 false
 < MX: case MX.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
============================
 false
 < N: case NNS'3.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames NScope NRest
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N : domain [(X, intVal 0)] NScope
N1 : names [] NRest
N2 : NScope ++ NRest = SNames
============================
 false
 < case N1.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames NScope
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N : domain [(X, intVal 0)] NScope
N2 : NScope ++ [] = SNames
============================
 false
 < D: case N.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames DRest
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : X::DRest ++ [] = SNames
D : domain [] DRest
============================
 false
 < case D.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : [X] ++ [] = SNames
============================
 false
 < compute N2.

Subgoal 2.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 [X] -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : [X] ++ [] = [X]
============================
 false
 < backchain NNS'5.

Subgoal 2.1.1.1.6.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X1 BNames
MX : mem X1 []
============================
 false
 < case MX.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < P: assert 1 + -1 = 0.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
P : 1 + -1 = 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < apply drop_is_integer to Drop2.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
P : 1 + -1 = 0
H8 : is_integer N5
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < apply plus_integer_unique_addend to _ _ _ P Drop1.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE_B'
GEq : -1 >= 0
P : 1 + -1 = 0
H8 : is_integer -1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < LEq: case GEq.

Subgoal 2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE_B'
P : 1 + -1 = 0
H8 : is_integer -1
LEq : 0 <= -1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < case LEq.

Subgoal 2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length (S::BR) N
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < LenBR: case LenEE_B'.

Subgoal 2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < apply length_is to LenBR.

Subgoal 2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < LEq: apply newNameScopes_length to NNS' LenBR.

Subgoal 2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
LEq : N <= N'
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
LEq : N <= N'
L' : N' < N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < apply less_lesseq_flip_false to L' LEq.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < CN: apply evalExpr_ctx_names to _ _ _ _ _ EN EvC.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvT: apply evalExpr_newNameScopes_exists_back to _ _ _ _ _ _ EN1 Ev3 NNS2.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes_output to _ _ _ _ Ev EvC _.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes_output to _ _ _ _ Ev3 EvT _.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes to _ _ _ _ Ev3 EvT _.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvN: case Ev1.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N O2 Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev2 : O2 ++ [] = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply append_nil_right to Ev2.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev2 : O ++ [] = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < clear Ev2.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Eq: assert V = V2.

Subgoal 2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 V = V2
 < NNS-: apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev3 EvT _.

Subgoal 2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N EE5 EE_B'1
============================
 V = V2
 < NNS-: case NNS-.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 EE5 EE_B'1
NNS-2 : take N2 EE5 [[], [(X, intVal 0)]]
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 V = V2
 < Take: case NNS-2.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::L) O6
Ev5 : replaceScopes X V2 ([]::L) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::L) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L [[(X, intVal 0)]]
============================
 V = V2
 < Take: case Take1.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + N4 = N3
Take2 : take N4 L1 []
============================
 V = V2
 < case Take2.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + 0 = N3
============================
 V = V2
 < compute Take1.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = N2
Take1 : 1 + 0 = 1
============================
 V = V2
 < compute Take.

Subgoal 2.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
============================
 V = V2
 < RS: case Ev5.

Subgoal 2.2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : mem (X, I) []
RS1 : remove_all [] X LRemain
============================
 V = V2
 < case RS.

Subgoal 2.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : replaceScopes X V2 ([(X, intVal 0)]::L1) (Scope::EE')
============================
 V = V2
 < RS: case RS1.

Subgoal 2.2.1.2.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 V = V2
 < LS: case EvN.

Subgoal 2.2.1.2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS : lookup ((X, V2)::LRemain) X V
============================
 V = V2
 < E: case LS.

Subgoal 2.2.1.2.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 V = V
 < search.

Subgoal 2.2.1.2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
E : X = X -> false
E1 : lookup LRemain X V
============================
 V = V2
 < apply E to _.

Subgoal 2.2.1.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS : no_lookup ((X, V2)::LRemain) X
LS1 : lookupScopes X EE' V
============================
 V = V2
 < E: case LS.

Subgoal 2.2.1.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS1 : lookupScopes X EE' V
E : X = X -> false
E1 : no_lookup LRemain X
============================
 V = V2
 < apply E to _.

Subgoal 2.2.1.2.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : no_lookup [(X, intVal 0)] X
RS2 : replaceScopes X V2 L1 EE'
============================
 V = V2
 < E: case RS1.

Subgoal 2.2.1.2.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS2 : replaceScopes X V2 L1 EE'
E : X = X -> false
E1 : no_lookup [] X
============================
 V = V2
 < apply E to _.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 V = V2
 < LenBR+: apply evalExpr_keep_scopes to _ _ _ EvT LenEE_B'.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR+ : length (S::BR) N
============================
 V = V2
 < LenBR: case LenBR+.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 V = V2
 < apply length_is to LenBR.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 V = V2
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
============================
 V = V2
 < LEq: apply newNameScopes_length to NNS- LenBR.

Subgoal 2.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
LEq : N <= N'
============================
 V = V2
 < apply less_lesseq_flip_false to L' LEq.

Subgoal 2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
Eq : V = V2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case Eq.

Subgoal 2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V2 EE'' O /\ scopes_same EE' EE''
 < exists EE_B'1.

Subgoal 2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 evalExpr FE EE4 (condExpr C T F) V2 EE_B'1 O /\ scopes_same EE' EE_B'1
 < split.

Subgoal 2.3:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 evalExpr FE EE4 (condExpr C T F) V2 EE_B'1 O
 < search.

Subgoal 2.4:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 scopes_same EE' EE_B'1
 < NNS-: apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev3 EvT _.

Subgoal 2.4:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N EE5 EE_B'1
============================
 scopes_same EE' EE_B'1
 < NNS-: case NNS-.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 EE5 EE_B'1
NNS-2 : take N2 EE5 [[], [(X, intVal 0)]]
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 scopes_same EE' EE_B'1
 < Take: case NNS-2.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::L) O6
Ev5 : replaceScopes X V2 ([]::L) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::L) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L [[(X, intVal 0)]]
============================
 scopes_same EE' EE_B'1
 < Take: case Take1.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + N4 = N3
Take2 : take N4 L1 []
============================
 scopes_same EE' EE_B'1
 < case Take2.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + 0 = N3
============================
 scopes_same EE' EE_B'1
 < compute Take1.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = N2
Take1 : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < compute Take.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < Drop: case NNS-1.

Subgoal 2.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : drop N5 ([(X, intVal 0)]::L1) EE_B'1
============================
 scopes_same EE' EE_B'1
 < Drop: case Drop1.

Subgoal 2.4.1.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 ([(X, intVal 0)]::L1) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length ([(X, intVal 0)]::L1) N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names ([(X, intVal 0)]::L1) BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 0 = 2
============================
 scopes_same EE' ([(X, intVal 0)]::L1)
 < apply plus_integer_unique to Take1 Drop.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
============================
 scopes_same EE' EE_B'1
 < apply drop_is_integer to Drop2.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_is_integer to _ _ Drop1.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer N5
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ Drop Take.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + N6 = 1
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer 1
============================
 scopes_same EE' EE_B'1
 < P: assert 1 + 0 = 1.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + N6 = 1
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ P Drop1.

Subgoal 2.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < Drop: case Drop2 (keep).

Subgoal 2.4.1.2.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::EE_B'1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < RS: case Ev5.

Subgoal 2.4.1.2.1.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE' O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : mem (X, I) []
RS1 : remove_all [] X LRemain
============================
 scopes_same EE' EE'
 < case RS.

Subgoal 2.4.1.2.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : replaceScopes X V2 ([(X, intVal 0)]::EE_B'1) (Scope::EE')
============================
 scopes_same EE' EE_B'1
 < RS: case RS1.

Subgoal 2.4.1.2.1.2.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE' O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 scopes_same EE' EE'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 2.4.1.2.1.2.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE' O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
H9 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 scopes_same EE' EE'
 < backchain scopes_same_reflexive.

Subgoal 2.4.1.2.1.2.2:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : no_lookup [(X, intVal 0)] X
RS2 : replaceScopes X V2 EE_B'1 EE'
============================
 scopes_same EE' EE_B'1
 < E: case RS1.

Subgoal 2.4.1.2.1.2.2:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS2 : replaceScopes X V2 EE_B'1 EE'
E : X = X -> false
E1 : no_lookup [] X
============================
 scopes_same EE' EE_B'1
 < apply E to _.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
============================
 scopes_same EE' EE_B'1
 < apply drop_is_integer to Drop4.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
H9 : is_integer N9
============================
 scopes_same EE' EE_B'1
 < P': assert 1 + -1 = 0.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
H9 : is_integer N9
P' : 1 + -1 = 0
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ P' Drop3.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
============================
 scopes_same EE' EE_B'1
 < GE: apply drop_geq_0 to Drop4.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
GE : -1 >= 0
============================
 scopes_same EE' EE_B'1
 < LE: case GE.

Subgoal 2.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
LE : 0 <= -1
============================
 scopes_same EE' EE_B'1
 < case LE.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 scopes_same EE' (S::BR)
 < LenBR+: apply evalExpr_keep_scopes to _ _ _ EvT LenEE_B'.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR+ : length (S::BR) N
============================
 scopes_same EE' (S::BR)
 < LenBR: case LenBR+.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 scopes_same EE' (S::BR)
 < apply length_is to LenBR.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 scopes_same EE' (S::BR)
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
============================
 scopes_same EE' (S::BR)
 < LEq: apply newNameScopes_length to NNS- LenBR.

Subgoal 2.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C trueVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C trueVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) T V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvT : evalExpr FE EE_B' T V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
LEq : N <= N'
============================
 scopes_same EE' (S::BR)
 < apply less_lesseq_flip_false to L' LEq.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvC: apply evalExpr_newNameScopes_exists_back to _ _ _ _ _ Ctxs EN Ev NNS.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_isCtx to _ _ _ EvC.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev EvC NNS.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_ctx_names to _ _ _ _ Ctxs EN EvC.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev3 : evalStmt FE ([]::EE2) (assign X F) (Scope2::EE3) O6
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev3.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < LenEE_B': apply evalExpr_keep_scopes to _ _ _ EvC L.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < NNS2: assert newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'.

Subgoal 3.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
 < NNS': case NNS'.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 EE2 EE_B'
NNS'2 : take N2 EE2 [[(X, intVal 0)]]
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
 < unfold .

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 EE2 EE_B'
NNS'2 : take N2 EE2 [[(X, intVal 0)]]
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::EE2) EE_B') /\
   take N1 ([]::EE2) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Take: case NNS'2.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L []
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < case Take1.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 N2 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop N2 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N2
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < compute Take.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'1 : drop 1 ([(X, intVal 0)]::L) EE_B'
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Drop: case NNS'1.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N4 = 1
Drop1 : drop N4 L EE_B'
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < apply drop_is_integer to Drop1.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L N4
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N4 = 1
Drop1 : drop N4 L EE_B'
H7 : is_integer N4
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 3.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::L) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::L)
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::L)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE_B'
H7 : is_integer 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::L)) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::L)) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < Drop: case Drop1.

Subgoal 3.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::EE_B')) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 2,
   [X],
   BNames.

Subgoal 3.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 ((((length EE_B' N /\ drop 2 ([]::([(X, intVal 0)]::EE_B')) EE_B') /\
 take 2 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]) /\
 names [[], [(X, intVal 0)]] [X]) /\
 names EE_B' BNames) /\
 (forall X1, mem X1 [X] -> mem X1 BNames -> false)
 < split.

Subgoal 3.1.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 length EE_B' N
 < search.

Subgoal 3.1.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 drop 2 ([]::([(X, intVal 0)]::EE_B')) EE_B'
 < search.

Subgoal 3.1.1.1.3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 take 2 ([]::([(X, intVal 0)]::EE_B')) [[], [(X, intVal 0)]]
 < search.

Subgoal 3.1.1.1.4:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 names [[], [(X, intVal 0)]] [X]
 < search.

Subgoal 3.1.1.1.5:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 names EE_B' BNames
 < search.

Subgoal 3.1.1.1.6:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
============================
 forall X1, mem X1 [X] -> mem X1 BNames -> false
 < intros MX MB.

Subgoal 3.1.1.1.6:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MX : mem X1 [X]
MB : mem X1 BNames
============================
 false
 < MX: case MX.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
============================
 false
 < N: case NNS'3.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames NScope NRest
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N : domain [(X, intVal 0)] NScope
N1 : names [] NRest
N2 : NScope ++ NRest = SNames
============================
 false
 < case N1.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames NScope
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N : domain [(X, intVal 0)] NScope
N2 : NScope ++ [] = SNames
============================
 false
 < D: case N.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames DRest
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : X::DRest ++ [] = SNames
D : domain [] DRest
============================
 false
 < case D.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : [X] ++ [] = SNames
============================
 false
 < compute N2.

Subgoal 3.1.1.1.6.1:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 [X] -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X BNames
N2 : [X] ++ [] = [X]
============================
 false
 < backchain NNS'5.

Subgoal 3.1.1.1.6.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::EE_B') O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE_B')
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::EE_B')) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
MB : mem X1 BNames
MX : mem X1 []
============================
 false
 < case MX.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < P: assert 1 + -1 = 0.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
P : 1 + -1 = 0
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < apply drop_is_integer to Drop2.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames N5 L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + N5 = 0
Drop2 : drop N5 L1 EE_B'
GEq : N5 >= 0
P : 1 + -1 = 0
H8 : is_integer N5
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < apply plus_integer_unique_addend to _ _ _ P Drop1.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE_B'
GEq : -1 >= 0
P : 1 + -1 = 0
H8 : is_integer -1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < LEq: case GEq.

Subgoal 3.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 EE_B' V2 EE5 SNames BNames L1 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal ([(X, intVal 0)]::(X1::L1)) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::(X1::L1))
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::([(X, intVal 0)]::(X1::L1))) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS' : length EE_B' N
NNS'3 : names [[(X, intVal 0)]] SNames
NNS'4 : names EE_B' BNames
NNS'5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H7 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE_B'
P : 1 + -1 = 0
H8 : is_integer -1
LEq : 0 <= -1
============================
 exists N1 SNames BNames,
   ((((length EE_B' N /\ drop N1 ([]::([(X, intVal 0)]::(X1::L1))) EE_B') /\
   take N1 ([]::([(X, intVal 0)]::(X1::L1))) [[], [(X, intVal 0)]]) /\
   names [[], [(X, intVal 0)]] SNames) /\
   names EE_B' BNames) /\
   (forall X2, mem X2 SNames -> mem X2 BNames -> false)
 < case LEq.

Subgoal 3.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length (S::BR) N
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < LenBR: case LenEE_B'.

Subgoal 3.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < apply length_is to LenBR.

Subgoal 3.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < LEq: apply newNameScopes_length to NNS' LenBR.

Subgoal 3.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
LEq : N <= N'
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 3.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 O5 Scope2 O6 V2 EE5 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal (S::AR) O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal (S::BR) O5
H4 : is_list (is_list (is_pair is_string is_value)) (S::AR)
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : ctx_names (S::BR) Ctx
Ev3 : evalExpr FE ([]::(S::AR)) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
NNS' : newNameScopes [[(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
LEq : N <= N'
L' : N' < N
============================
 newNameScopes [[], [(X, intVal 0)]] N ([]::(S::AR)) (S::BR)
 < apply less_lesseq_flip_false to L' LEq.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < CN: apply evalExpr_ctx_names to _ _ _ _ _ EN EvC.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvF: apply evalExpr_newNameScopes_exists_back to _ _ _ _ _ _ EN2 Ev3 NNS2.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes_output to _ _ _ _ Ev EvC _.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes_output to _ _ _ _ Ev3 EvF _.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply evalExpr_newNameScopes to _ _ _ _ Ev3 EvF _.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N EE3 O2 Scope O3 EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev1 : evalExpr FE EE3 (name X) V (Scope::EE') O3
Ev2 : O2 ++ O3 = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::EE3)
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < EvN: case Ev1.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N O2 Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev2 : O2 ++ [] = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O2
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < apply append_nil_right to Ev2.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev2 : O ++ [] = O
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < clear Ev2.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < Eq: assert V = V2.

Subgoal 3.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
============================
 V = V2
 < NNS-: apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev3 EvF _.

Subgoal 3.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N EE5 EE_B'1
============================
 V = V2
 < NNS-: case NNS-.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 EE5 EE_B'1
NNS-2 : take N2 EE5 [[], [(X, intVal 0)]]
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 V = V2
 < Take: case NNS-2.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::L) O6
Ev5 : replaceScopes X V2 ([]::L) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::L) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L [[(X, intVal 0)]]
============================
 V = V2
 < Take: case Take1.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + N4 = N3
Take2 : take N4 L1 []
============================
 V = V2
 < case Take2.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + 0 = N3
============================
 V = V2
 < compute Take1.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = N2
Take1 : 1 + 0 = 1
============================
 V = V2
 < compute Take.

Subgoal 3.2.1:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
============================
 V = V2
 < RS: case Ev5.

Subgoal 3.2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : mem (X, I) []
RS1 : remove_all [] X LRemain
============================
 V = V2
 < case RS.

Subgoal 3.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : replaceScopes X V2 ([(X, intVal 0)]::L1) (Scope::EE')
============================
 V = V2
 < RS: case RS1.

Subgoal 3.2.1.2.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 V = V2
 < LS: case EvN.

Subgoal 3.2.1.2.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS : lookup ((X, V2)::LRemain) X V
============================
 V = V2
 < E: case LS.

Subgoal 3.2.1.2.1.1.1:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 V = V
 < search.

Subgoal 3.2.1.2.1.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
E : X = X -> false
E1 : lookup LRemain X V
============================
 V = V2
 < apply E to _.

Subgoal 3.2.1.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS : no_lookup ((X, V2)::LRemain) X
LS1 : lookupScopes X EE' V
============================
 V = V2
 < E: case LS.

Subgoal 3.2.1.2.1.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
LS1 : lookupScopes X EE' V
E : X = X -> false
E1 : no_lookup LRemain X
============================
 V = V2
 < apply E to _.

Subgoal 3.2.1.2.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS1 : no_lookup [(X, intVal 0)] X
RS2 : replaceScopes X V2 L1 EE'
============================
 V = V2
 < E: case RS1.

Subgoal 3.2.1.2.2:

Variables: Names FE V EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
RS : no_lookup [] X
RS2 : replaceScopes X V2 L1 EE'
E : X = X -> false
E1 : no_lookup [] X
============================
 V = V2
 < apply E to _.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 V = V2
 < LenBR+: apply evalExpr_keep_scopes to _ _ _ EvF LenEE_B'.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR+ : length (S::BR) N
============================
 V = V2
 < LenBR: case LenBR+.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 V = V2
 < apply length_is to LenBR.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 V = V2
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
============================
 V = V2
 < LEq: apply newNameScopes_length to NNS- LenBR.

Subgoal 3.2.2:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
LEq : N <= N'
============================
 V = V2
 < apply less_lesseq_flip_false to L' LEq.

Subgoal 3:

Variables: Names FE V EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V
Eq : V = V2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V EE'' O /\ scopes_same EE' EE''
 < case Eq.

Subgoal 3:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 exists EE'', evalExpr FE EE4 (condExpr C T F) V2 EE'' O /\ scopes_same EE' EE''
 < exists EE_B'1.

Subgoal 3:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 evalExpr FE EE4 (condExpr C T F) V2 EE_B'1 O /\ scopes_same EE' EE_B'1
 < split.

Subgoal 3.3:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 evalExpr FE EE4 (condExpr C T F) V2 EE_B'1 O
 < search.

Subgoal 3.4:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
============================
 scopes_same EE' EE_B'1
 < NNS-: apply evalExpr_newNameScopes_ctx to _ _ _ _ Ev3 EvF _.

Subgoal 3.4:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N EE5 EE_B'1
============================
 scopes_same EE' EE_B'1
 < NNS-: case NNS-.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE5 EE_B'1 N2 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 EE5 O6
Ev5 : replaceScopes X V2 EE5 (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 EE5 EE_B'1
NNS-2 : take N2 EE5 [[], [(X, intVal 0)]]
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 scopes_same EE' EE_B'1
 < Take: case NNS-2.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::L) O6
Ev5 : replaceScopes X V2 ([]::L) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::L) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : take N3 L [[(X, intVal 0)]]
============================
 scopes_same EE' EE_B'1
 < Take: case Take1.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 N4 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + N4 = N3
Take2 : take N4 L1 []
============================
 scopes_same EE' EE_B'1
 < case Take2.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames N3 L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N3 = N2
Take1 : 1 + 0 = N3
============================
 scopes_same EE' EE_B'1
 < compute Take1.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 N2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop N2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = N2
Take1 : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < compute Take.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-1 : drop 2 ([]::([(X, intVal 0)]::L1)) EE_B'1
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < Drop: case NNS-1.

Subgoal 3.4.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : drop N5 ([(X, intVal 0)]::L1) EE_B'1
============================
 scopes_same EE' EE_B'1
 < Drop: case Drop1.

Subgoal 3.4.1.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 ([(X, intVal 0)]::L1) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length ([(X, intVal 0)]::L1) N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names ([(X, intVal 0)]::L1) BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 0 = 2
============================
 scopes_same EE' ([(X, intVal 0)]::L1)
 < apply plus_integer_unique to Take1 Drop.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
============================
 scopes_same EE' EE_B'1
 < apply drop_is_integer to Drop2.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_is_integer to _ _ Drop1.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N5 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + N5 = 2
Drop1 : 1 + N6 = N5
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer N5
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ Drop Take.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + N6 = 1
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer 1
============================
 scopes_same EE' EE_B'1
 < P: assert 1 + 0 = 1.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1 N6
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + N6 = 1
Drop2 : drop N6 L1 EE_B'1
H7 : is_integer N6
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ P Drop1.

Subgoal 3.4.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::L1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::L1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < Drop: case Drop2 (keep).

Subgoal 3.4.1.2.1:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::EE_B'1)) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
============================
 scopes_same EE' EE_B'1
 < RS: case Ev5.

Subgoal 3.4.1.2.1.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE' O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : mem (X, I) []
RS1 : remove_all [] X LRemain
============================
 scopes_same EE' EE'
 < case RS.

Subgoal 3.4.1.2.1.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : replaceScopes X V2 ([(X, intVal 0)]::EE_B'1) (Scope::EE')
============================
 scopes_same EE' EE_B'1
 < RS: case RS1.

Subgoal 3.4.1.2.1.2.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE' O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
============================
 scopes_same EE' EE'
 < apply evalExpr_isCtx to _ _ _ EvF.

Subgoal 3.4.1.2.1.2.1:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 SNames BNames I LRemain
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE')) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE' O6
EvN : lookupScopes X (((X, V2)::LRemain)::EE') V2
NNS- : length EE' N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE' BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE' EE'
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : mem (X, I) [(X, intVal 0)]
RS2 : remove_all [(X, intVal 0)] X LRemain
H9 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 scopes_same EE' EE'
 < backchain scopes_same_reflexive.

Subgoal 3.4.1.2.1.2.2:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS1 : no_lookup [(X, intVal 0)] X
RS2 : replaceScopes X V2 EE_B'1 EE'
============================
 scopes_same EE' EE_B'1
 < E: case RS1.

Subgoal 3.4.1.2.1.2.2:

Variables: Names FE EE' O Ctx X F T C N EE4 EE2 O5 O6 EE_B' V2 EE_B'1 SNames BNames
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::EE_B'1)) O6
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X ([(X, intVal 0)]::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 EE_B'1 EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
RS : no_lookup [] X
RS2 : replaceScopes X V2 EE_B'1 EE'
E : X = X -> false
E1 : no_lookup [] X
============================
 scopes_same EE' EE_B'1
 < apply E to _.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
============================
 scopes_same EE' EE_B'1
 < apply drop_is_integer to Drop4.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
H9 : is_integer N9
============================
 scopes_same EE' EE_B'1
 < P': assert 1 + -1 = 0.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames N9 L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + N9 = 0
Drop4 : drop N9 L2 EE_B'1
H9 : is_integer N9
P' : 1 + -1 = 0
============================
 scopes_same EE' EE_B'1
 < apply plus_integer_unique_addend to _ _ _ P' Drop3.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
============================
 scopes_same EE' EE_B'1
 < GE: apply drop_geq_0 to Drop4.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
GE : -1 >= 0
============================
 scopes_same EE' EE_B'1
 < LE: case GE.

Subgoal 3.4.1.2.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 EE_B'1 SNames BNames L2 X1
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 ([]::([(X, intVal 0)]::(X1::L2))) O6
Ev5 : replaceScopes X V2 ([]::([(X, intVal 0)]::(X1::L2))) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 EE_B'1 O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : length EE_B'1 N
NNS-3 : names [[], [(X, intVal 0)]] SNames
NNS-4 : names EE_B'1 BNames
NNS-5 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 1 = 2
Take1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : 1 + 0 = 1
Drop2 : drop 0 (X1::L2) EE_B'1
H7 : is_integer 0
H8 : is_integer 1
P : 1 + 0 = 1
Drop3 : 1 + -1 = 0
Drop4 : drop -1 L2 EE_B'1
H9 : is_integer -1
P' : 1 + -1 = 0
LE : 0 <= -1
============================
 scopes_same EE' EE_B'1
 < case LE.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
============================
 scopes_same EE' (S::BR)
 < LenBR+: apply evalExpr_keep_scopes to _ _ _ EvF LenEE_B'.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR+ : length (S::BR) N
============================
 scopes_same EE' (S::BR)
 < LenBR: case LenBR+.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
============================
 scopes_same EE' (S::BR)
 < apply length_is to LenBR.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
============================
 scopes_same EE' (S::BR)
 < L': apply lt_plus_one to LenBR1 _.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
============================
 scopes_same EE' (S::BR)
 < LEq: apply newNameScopes_length to NNS- LenBR.

Subgoal 3.4.2:

Variables: Names FE EE' O Ctx X F T C N Scope EE4 EE2 O5 Scope2 O6 EE_B' V2 BR S AR N'
Pr : Names |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
Names : names EE4 Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE4
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE4 Ctx
Pr1 : fresh_name "X" Names X
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
EN : exprNames Ctx C []
EN1 : exprNames Ctx T []
EN2 : exprNames Ctx F []
L : length EE4 N
NNS : newNameScopes [[(X, intVal 0)]] N ([(X, intVal 0)]::EE4) EE4
IsX : is_string X
Ev : evalExpr FE ([(X, intVal 0)]::EE4) C falseVal EE2 O5
Ev4 : O5 ++ O6 = O
EvC : evalExpr FE EE4 C falseVal EE_B' O5
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_B'
NNS' : newNameScopes [[(X, intVal 0)]] N EE2 EE_B'
H6 : ctx_names EE_B' Ctx
Ev3 : evalExpr FE ([]::EE2) F V2 (S::AR) O6
Ev5 : replaceScopes X V2 (S::AR) (Scope2::(Scope::EE'))
LenEE_B' : length EE_B' N
NNS2 : newNameScopes [[], [(X, intVal 0)]] N ([]::EE2) EE_B'
CN : ctx_names EE_B' Ctx
EvF : evalExpr FE EE_B' F V2 (S::BR) O6
EvN : lookupScopes X (Scope::EE') V2
NNS- : newNameScopes [[], [(X, intVal 0)]] N AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = N
H7 : is_integer N'
L' : N' < N
LEq : N <= N'
============================
 scopes_same EE' (S::BR)
 < apply less_lesseq_flip_false to L' LEq.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_backward.

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

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Names: apply names_exists to IsEE.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C N1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE N1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < rename N1 to Nmes.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsNames: apply names_is to _ Names.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Fr: apply fresh_name_exists to _ IsNames with
         Base = "X".

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes F1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes F1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < rename F1 to X.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Proj: assert Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X).

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsN2: apply ext_size_is_int_evalExpr to R3.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsN3: apply ext_size_is_int_evalExpr to R4.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < PN2: apply ext_size_pos_evalExpr to R3.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < PN3: apply ext_size_pos_evalExpr to R4.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEq2: apply lte_left to R2 _ _ _.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEq3: apply lte_right to R2 _ _ _.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < P: apply plus_integer_is_integer to _ _ R2.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LN4: apply lt_plus_one to R1 _.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEqN2: apply lesseq_less_integer_transitive to LEq2 LN4.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEqN3: apply lesseq_less_integer_transitive to LEq3 LN4.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Acc: case Acc.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < A2: apply Acc to _ LEqN2.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A2 : acc N2 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < A3: apply Acc to _ LEqN3.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A2 : acc N2 *
A3 : acc N3 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < clear Acc
   LEqN3
   LEqN2
   LN4
   P
   LEq3
   LEq2
   PN3
   PN2
   IsN3
   IsN2.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case IsE.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < unfold .

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 exists Names E_P V_P EE_P O_P EE1 O1 O2,
   (<evalExpr {P}> FE EE C trueVal EE1 O1 /\
   (<evalExpr {P}> FE EE1 T V EE' O2 /\ O1 ++ O2 = O)) /\
   (names EE Names /\
   (Names |{expr}- condExpr C T F ~~> E_P /\
   <evalExpr {P}> FE EE E_P V_P EE_P O_P))
 < exists Nmes,
   stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X),
   V,
   EE',
   O,
   EE3,
   O2,
   O3.

Subgoal 1.27:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 (<evalExpr {P}> FE EE C trueVal EE3 O2 /\
 (<evalExpr {P}> FE EE3 T V EE' O3 /\ O2 ++ O3 = O)) /\
 (names EE Nmes /\
 (Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X) /\
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O))
 < split.

Subgoal 1.27.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 <evalExpr {P}> FE EE C trueVal EE3 O2
 < apply IH to R3 A2 _ _ _.

Subgoal 1.27.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C trueVal EE3 O2
============================
 <evalExpr {P}> FE EE C trueVal EE3 O2
 < search.

Subgoal 1.27.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 <evalExpr {P}> FE EE3 T V EE' O3
 < Ev1: apply drop_ext_size_evalExpr to R3.

Subgoal 1.27.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ev1 : evalExpr FE EE C trueVal EE3 O2
============================
 <evalExpr {P}> FE EE3 T V EE' O3
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ev1 : evalExpr FE EE C trueVal EE3 O2
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 <evalExpr {P}> FE EE3 T V EE' O3
 < apply IH to R4 A3 _ _ _.

Subgoal 1.27.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ev1 : evalExpr FE EE C trueVal EE3 O2
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : <evalExpr {P}> FE EE3 T V EE' O3
============================
 <evalExpr {P}> FE EE3 T V EE' O3
 < search.

Subgoal 1.27.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 O2 ++ O3 = O
 < search.

Subgoal 1.27.4:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 names EE Nmes
 < search.

Subgoal 1.27.5:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
 < search.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < L: apply length_exists_list_pair_string_value to IsEE.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X N1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE N1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < rename N1 to Len.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvD: assert evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) [].

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS: assert newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE.

Subgoal 1.27.6.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
 < unfold .

Subgoal 1.27.6.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 exists N SNames BNames,
   ((((length EE Len /\ drop N ([(X, intVal 0)]::EE) EE) /\
   take N ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
   names [[(X, intVal 0)]] SNames) /\
   names EE BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 1,
   [X],
   Nmes.

Subgoal 1.27.6.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 ((((length EE Len /\ drop 1 ([(X, intVal 0)]::EE) EE) /\
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
 names [[(X, intVal 0)]] [X]) /\
 names EE Nmes) /\
 (forall X1, mem X1 [X] -> mem X1 Nmes -> false)
 < split.

Subgoal 1.27.6.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 length EE Len
 < search.

Subgoal 1.27.6.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 drop 1 ([(X, intVal 0)]::EE) EE
 < search.

Subgoal 1.27.6.1.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]
 < search.

Subgoal 1.27.6.1.4:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names [[(X, intVal 0)]] [X]
 < search.

Subgoal 1.27.6.1.5:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names EE Nmes
 < search.

Subgoal 1.27.6.1.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 forall X1, mem X1 [X] -> mem X1 Nmes -> false
 < intros MX MN.

Subgoal 1.27.6.1.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MX : mem X1 [X]
MN : mem X1 Nmes
============================
 false
 < MX: case MX.

Subgoal 1.27.6.1.6.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X Nmes
============================
 false
 < apply fresh_name_not_mem to _ MN.

Subgoal 1.27.6.1.6.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X1 Nmes
MX : mem X1 []
============================
 false
 < case MX.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < IsX: apply fresh_name_is to _ Fr.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Ev: apply drop_ext_size_evalExpr to R3.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Ev1: apply drop_ext_size_evalExpr to R4.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < assert is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE)).

Subgoal 1.27.6.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
 < search 6.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA_ES: apply evalExpr_newNameScopes_exists_ES to _ _ _ _ R3 NNS.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2 N2
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA_P: apply IH to EvA_ES A2 _ _ _.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA: apply drop_ext_size_evalExpr to EvA_ES.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA Ev _.

Subgoal 1.27.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] Len EE_A' EE3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS': case NNS' (keep).

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A' N1 SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] Len EE_A' EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 EE_A' EE3
NNS'3 : take N1 EE_A' [[(X, intVal 0)]]
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Take: case NNS'3.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len N1 SNames BNames N5 L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N5 = N1
Take1 : take N5 L []
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < case Take1.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len N1 SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < compute Take.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Eq: assert L = EE3.

Subgoal 1.27.6.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 L = EE3
 < Drop: case NNS'2.

Subgoal 1.27.6.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L N6
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N6 = 1
Drop1 : drop N6 L EE3
============================
 L = EE3
 < apply drop_is_integer to Drop1.

Subgoal 1.27.6.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L N6
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N6 = 1
Drop1 : drop N6 L EE3
H6 : is_integer N6
============================
 L = EE3
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 1.27.6.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE3
H6 : is_integer 0
============================
 L = EE3
 < Drop: case Drop1.

Subgoal 1.27.6.3.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
============================
 EE3 = EE3
 < search.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
============================
 X1::L1 = EE3
 < P: assert 1 + -1 = 0.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
P : 1 + -1 = 0
============================
 X1::L1 = EE3
 < apply drop_is_integer to Drop2.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
P : 1 + -1 = 0
H7 : is_integer N7
============================
 X1::L1 = EE3
 < apply plus_integer_unique_addend to _ _ _ Drop1 P.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H7 : is_integer -1
============================
 X1::L1 = EE3
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H7 : is_integer -1
GEq : -1 >= 0
============================
 X1::L1 = EE3
 < LEq: case GEq.

Subgoal 1.27.6.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H6 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H7 : is_integer -1
LEq : 0 <= -1
============================
 X1::L1 = EE3
 < case LEq.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Eq : L = EE3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < case Eq.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS'': assert newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA2_ES: apply evalExpr_newNameScopes_exists_ES to _ _ _ _ R4 NNS''.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3 N3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA2_P: apply IH to EvA2_ES A3 _ _ _.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA2: apply drop_ext_size_evalExpr to EvA2_ES.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS''': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA2 Ev1 _.

Subgoal 1.27.6.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len EE_A'1 EE'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < NNS''': case NNS'''.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1 N6 SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V EE_A'1 O3
NNS''' : length EE' Len
NNS'''1 : drop N6 EE_A'1 EE'
NNS'''2 : take N6 EE_A'1 [[], [(X, intVal 0)]]
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < T: case NNS'''2.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 L1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::L1) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::L1) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::L1) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::L1) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : take N7 L1 [[(X, intVal 0)]]
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < T: case T1.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 N9 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : 1 + N9 = N7
T2 : take N9 L2 []
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < case T2.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : 1 + 0 = N7
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < compute T1.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = N6
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < compute T.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Eq: assert L2 = EE'.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 L2 = EE'
 < Drop: case NNS'''1.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N10
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N10 = 2
Drop1 : drop N10 ([(X, intVal 0)]::L2) EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop1.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N10
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N10 = 2
Drop1 : drop N10 ([(X, intVal 0)]::L2) EE'
H7 : is_integer N10
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T Drop.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : drop 1 ([(X, intVal 0)]::L2) EE'
H7 : is_integer 1
============================
 L2 = EE'
 < Drop: case Drop1.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N11
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + N11 = 1
Drop2 : drop N11 L2 EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop2.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N11
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + N11 = 1
Drop2 : drop N11 L2 EE'
H8 : is_integer N11
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T1 Drop1.

Subgoal 1.27.6.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L2 EE'
H8 : is_integer 0
============================
 L2 = EE'
 < Drop: case Drop2.

Subgoal 1.27.6.3.2.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
============================
 EE' = EE'
 < search.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
============================
 X1::L3 = EE'
 < P: assert 1 + -1 = 0.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
P : 1 + -1 = 0
============================
 X1::L3 = EE'
 < apply drop_is_integer to Drop3.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
P : 1 + -1 = 0
H9 : is_integer N14
============================
 X1::L3 = EE'
 < apply plus_integer_unique_addend to _ _ _ P Drop2.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H9 : is_integer -1
============================
 X1::L3 = EE'
 < GEq: apply drop_geq_0 to Drop3.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H9 : is_integer -1
GEq : -1 >= 0
============================
 X1::L3 = EE'
 < LEq: case GEq.

Subgoal 1.27.6.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H7 : is_integer 1
Drop1 : 1 + 0 = 1
H8 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H9 : is_integer -1
LEq : 0 <= -1
============================
 X1::L3 = EE'
 < case LEq.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Eq : L2 = EE'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < case Eq.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < assert replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE')).

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < EvA3_P: assert <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H8 : is_list is_value O2
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA2.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H8 : is_list is_value O2
H9 : is_list is_value O3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < IsO: apply append_values_is to _ _ R5.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H8 : is_list is_value O2
H9 : is_list is_value O3
IsO : is_list is_value O
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < App: apply append_values_total to IsO with
          LB = [].

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H8 : is_list is_value O2
H9 : is_list is_value O3
IsO : is_list is_value O
App : O ++ [] = L3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply append_nil_right to App.

Subgoal 1.27.6.3.2:

Variables: N FE EE V EE' N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' L3 N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V EE' O3 N3 **
R5 : O2 ++ O3 = L3
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H7 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X T) ([]::([(X, V)]::EE')) O3
H8 : is_list is_value O2
H9 : is_list is_value O3
IsO : is_list is_value L3
App : L3 ++ [] = L3
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' L3
 < search.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < LenEE3: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev1 LenEE3.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenSBR : length (S::BR) Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < LenBR: case LenSBR.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < apply length_is to LenBR.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H7 : is_integer N'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < LEq: apply newNameScopes_length to NNS''' LenBR.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H7 : is_integer N'
LEq : Len <= N'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 1.27.6.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 T V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal EE3 O2
Ev1 : evalExpr FE EE3 T V (S::BR) O3
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H6 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) T V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H7 : is_integer N'
LEq : Len <= N'
Less : N' < Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V (S::BR) O
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenSBR : length (S::BR) Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < LenBR: case LenSBR.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply length_is to LenBR.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H6 : is_integer N'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < LEq: apply newNameScopes_length to NNS'1 LenBR.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H6 : is_integer N'
LEq : Len <= N'
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 1.27.6.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C trueVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) T V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
Ev : evalExpr FE EE C trueVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) T V EE' O3
H4 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H5 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C trueVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H6 : is_integer N'
LEq : Len <= N'
Less : N' < Len
============================
 <evalExpr {P}> FE EE (stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)) V EE' O
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Names: apply names_exists to IsEE.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C N1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE N1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < rename N1 to Nmes.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsNames: apply names_is to _ Names.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Fr: apply fresh_name_exists to _ IsNames with
         Base = "X".

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes F1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes F1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < rename F1 to X.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Proj: assert Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X).

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsN2: apply ext_size_is_int_evalExpr to R3.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsN3: apply ext_size_is_int_evalExpr to R4.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < PN2: apply ext_size_pos_evalExpr to R3.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < PN3: apply ext_size_pos_evalExpr to R4.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEq2: apply lte_left to R2 _ _ _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEq3: apply lte_right to R2 _ _ _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < P: apply plus_integer_is_integer to _ _ R2.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LN4: apply lt_plus_one to R1 _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEqN2: apply lesseq_less_integer_transitive to LEq2 LN4.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEqN3: apply lesseq_less_integer_transitive to LEq3 LN4.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
Acc : acc N @
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Acc: case Acc.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < A2: apply Acc to _ LEqN2.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A2 : acc N2 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < A3: apply Acc to _ LEqN3.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
IsN2 : is_integer N2
IsN3 : is_integer N3
PN2 : 0 <= N2
PN3 : 0 <= N3
LEq2 : N2 <= N4
LEq3 : N3 <= N4
P : is_integer N4
LN4 : N4 < N
LEqN2 : N2 < N
LEqN3 : N3 < N
Acc : forall M, 0 <= M -> M < N -> acc M *
A2 : acc N2 *
A3 : acc N3 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < clear Acc
   LEqN3
   LEqN2
   LN4
   P
   LEq3
   LEq2
   PN3
   PN2
   IsN3
   IsN2.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsE : is_expr (condExpr C T F)
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case IsE.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply IH to R3 A2 _ _ _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Ev: apply drop_ext_size_evalExpr to R3.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Ev1: apply drop_ext_size_evalExpr to R4.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply IH to R4 A3 _ _ _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < L: apply length_exists_list_pair_string_value to IsEE.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X N1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE N1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < rename N1 to Len.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvD: assert evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) [].

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS: assert newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE.

Subgoal 1.28.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
 < unfold .

Subgoal 1.28.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 exists N SNames BNames,
   ((((length EE Len /\ drop N ([(X, intVal 0)]::EE) EE) /\
   take N ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
   names [[(X, intVal 0)]] SNames) /\
   names EE BNames) /\
   (forall X1, mem X1 SNames -> mem X1 BNames -> false)
 < exists 1,
   [X],
   Nmes.

Subgoal 1.28.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 ((((length EE Len /\ drop 1 ([(X, intVal 0)]::EE) EE) /\
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]) /\
 names [[(X, intVal 0)]] [X]) /\
 names EE Nmes) /\
 (forall X1, mem X1 [X] -> mem X1 Nmes -> false)
 < split.

Subgoal 1.28.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 length EE Len
 < search.

Subgoal 1.28.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 drop 1 ([(X, intVal 0)]::EE) EE
 < search.

Subgoal 1.28.1.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 take 1 ([(X, intVal 0)]::EE) [[(X, intVal 0)]]
 < search.

Subgoal 1.28.1.4:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names [[(X, intVal 0)]] [X]
 < search.

Subgoal 1.28.1.5:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 names EE Nmes
 < search.

Subgoal 1.28.1.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
============================
 forall X1, mem X1 [X] -> mem X1 Nmes -> false
 < intros MX MN.

Subgoal 1.28.1.6:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MX : mem X1 [X]
MN : mem X1 Nmes
============================
 false
 < MX: case MX.

Subgoal 1.28.1.6.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X Nmes
============================
 false
 < apply fresh_name_not_mem to _ MN.

Subgoal 1.28.1.6.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
MN : mem X1 Nmes
MX : mem X1 []
============================
 false
 < case MX.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsX: apply fresh_name_is to _ Fr.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < assert is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE)).

Subgoal 1.28.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
============================
 is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
 < search 6.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA_ES: apply evalExpr_newNameScopes_exists_ES to _ _ _ _ R3 NNS.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2 N2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA_P: apply IH to EvA_ES A2 _ _ _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA: apply drop_ext_size_evalExpr to EvA_ES.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA Ev _.

Subgoal 1.28:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] Len EE_A' EE3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS': case NNS' (keep).

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len EE_A' N1 SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal EE_A' O2
NNS' : newNameScopes [[(X, intVal 0)]] Len EE_A' EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 EE_A' EE3
NNS'3 : take N1 EE_A' [[(X, intVal 0)]]
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Take: case NNS'3.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len N1 SNames BNames N5 L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + N5 = N1
Take1 : take N5 L []
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case Take1.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len N1 SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop N1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = N1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < compute Take.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Eq: assert L = EE3.

Subgoal 1.28.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 L = EE3
 < Drop: case NNS'2.

Subgoal 1.28.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L N6
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N6 = 1
Drop1 : drop N6 L EE3
============================
 L = EE3
 < apply drop_is_integer to Drop1.

Subgoal 1.28.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L N6
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + N6 = 1
Drop1 : drop N6 L EE3
H8 : is_integer N6
============================
 L = EE3
 < apply plus_integer_unique_addend to _ _ _ Take Drop.

Subgoal 1.28.3.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
Drop1 : drop 0 L EE3
H8 : is_integer 0
============================
 L = EE3
 < Drop: case Drop1.

Subgoal 1.28.3.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
============================
 EE3 = EE3
 < search.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
============================
 X1::L1 = EE3
 < P: assert 1 + -1 = 0.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
P : 1 + -1 = 0
============================
 X1::L1 = EE3
 < apply drop_is_integer to Drop2.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N7 L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + N7 = 0
Drop2 : drop N7 L1 EE3
P : 1 + -1 = 0
H9 : is_integer N7
============================
 X1::L1 = EE3
 < apply plus_integer_unique_addend to _ _ _ Drop1 P.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H9 : is_integer -1
============================
 X1::L1 = EE3
 < GEq: apply drop_geq_0 to Drop2.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H9 : is_integer -1
GEq : -1 >= 0
============================
 X1::L1 = EE3
 < LEq: case GEq.

Subgoal 1.28.3.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L1 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::(X1::L1)) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::(X1::L1)) EE3
NNS'1 : length EE3 Len
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Drop : 1 + 0 = 1
H8 : is_integer 0
Drop1 : 1 + -1 = 0
Drop2 : drop -1 L1 EE3
P : 1 + -1 = 0
H9 : is_integer -1
LEq : 0 <= -1
============================
 X1::L1 = EE3
 < case LEq.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames L
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::L) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::L) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::L) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
Eq : L = EE3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case Eq.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS'': assert newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA2_ES: apply evalExpr_newNameScopes_exists_ES to _ _ _ _ R4 NNS''.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3 N3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA2_P: apply IH to EvA2_ES A3 _ _ _.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA2: apply drop_ext_size_evalExpr to EvA2_ES.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS''': apply evalExpr_newNameScopes_ctx to _ _ _ _ EvA2 Ev1 _.

Subgoal 1.28.3:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len EE_A'1 EE'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < NNS''': case NNS'''.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames EE_A'1 N6 SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V EE_A'1 O3
NNS''' : length EE' Len
NNS'''1 : drop N6 EE_A'1 EE'
NNS'''2 : take N6 EE_A'1 [[], [(X, intVal 0)]]
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < T: case NNS'''2.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 L1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::L1) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::L1) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::L1) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::L1) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : take N7 L1 [[(X, intVal 0)]]
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < T: case T1.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 N9 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : 1 + N9 = N7
T2 : take N9 L2 []
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case T2.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 N7 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + N7 = N6
T1 : 1 + 0 = N7
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < compute T1.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames N6 SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop N6 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = N6
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < compute T.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Eq: assert L2 = EE'.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 L2 = EE'
 < Drop: case NNS'''1.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N10
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N10 = 2
Drop1 : drop N10 ([(X, intVal 0)]::L2) EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop1.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N10
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + N10 = 2
Drop1 : drop N10 ([(X, intVal 0)]::L2) EE'
H9 : is_integer N10
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T Drop.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
Drop1 : drop 1 ([(X, intVal 0)]::L2) EE'
H9 : is_integer 1
============================
 L2 = EE'
 < Drop: case Drop1.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N11
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + N11 = 1
Drop2 : drop N11 L2 EE'
============================
 L2 = EE'
 < apply drop_is_integer to Drop2.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2 N11
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + N11 = 1
Drop2 : drop N11 L2 EE'
H10 : is_integer N11
============================
 L2 = EE'
 < apply plus_integer_unique_addend to _ _ _ T1 Drop1.

Subgoal 1.28.3.2.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
Drop2 : drop 0 L2 EE'
H10 : is_integer 0
============================
 L2 = EE'
 < Drop: case Drop2.

Subgoal 1.28.3.2.1.1:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
============================
 EE' = EE'
 < search.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
============================
 X1::L3 = EE'
 < P: assert 1 + -1 = 0.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
P : 1 + -1 = 0
============================
 X1::L3 = EE'
 < apply drop_is_integer to Drop3.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 N14 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + N14 = 0
Drop3 : drop N14 L3 EE'
P : 1 + -1 = 0
H11 : is_integer N14
============================
 X1::L3 = EE'
 < apply plus_integer_unique_addend to _ _ _ P Drop2.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H11 : is_integer -1
============================
 X1::L3 = EE'
 < GEq: apply drop_geq_0 to Drop3.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H11 : is_integer -1
GEq : -1 >= 0
============================
 X1::L3 = EE'
 < LEq: case GEq.

Subgoal 1.28.3.2.1.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3 X1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::(X1::L3))) O3
NNS''' : length EE' Len
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Drop : 1 + 1 = 2
H9 : is_integer 1
Drop1 : 1 + 0 = 1
H10 : is_integer 0
Drop2 : 1 + -1 = 0
Drop3 : drop -1 L3 EE'
P : 1 + -1 = 0
H11 : is_integer -1
LEq : 0 <= -1
============================
 X1::L3 = EE'
 < case LEq.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L2
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::L2)) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::L2)) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
Eq : L2 = EE'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < case Eq.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < assert replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE')).

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < EvA3_P: assert <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H10 : is_list is_value O2
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply evalExpr_isOutput to _ _ _ EvA2.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H10 : is_list is_value O2
H11 : is_list is_value O3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < IsO: apply append_values_is to _ _ R5.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H10 : is_list is_value O2
H11 : is_list is_value O3
IsO : is_list is_value O
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < App: apply append_values_total to IsO with
          LB = [].

Subgoal 1.28.3.2:

Variables: N FE EE V EE' O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H10 : is_list is_value O2
H11 : is_list is_value O3
IsO : is_list is_value O
App : O ++ [] = L3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply append_nil_right to App.

Subgoal 1.28.3.2:

Variables: N FE EE V EE' N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames SNames1 BNames1 L3
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' L3 N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V EE' O3 N3 **
R5 : O2 ++ O3 = L3
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V ([]::([(X, intVal 0)]::EE')) O3
NNS''' : length EE' Len
NNS'''1 : drop 2 ([]::([(X, intVal 0)]::EE')) EE'
NNS'''3 : names [[], [(X, intVal 0)]] SNames1
NNS'''4 : names EE' BNames1
NNS'''5 : forall X1, mem X1 SNames1 -> mem X1 BNames1 -> false
T : 1 + 1 = 2
T1 : 1 + 0 = 1
H9 : replaceScopes X V ([]::([(X, intVal 0)]::EE')) ([]::([(X, V)]::EE'))
EvA3_P : <evalStmt {P}> FE ([]::([(X, intVal 0)]::EE3)) (assign X F) ([]::([(X, V)]::EE')) O3
H10 : is_list is_value O2
H11 : is_list is_value O3
IsO : is_list is_value L3
App : L3 ++ [] = L3
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' L3
 < search.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < LenEE3: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev1 LenEE3.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenSBR : length (S::BR) Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < LenBR: case LenSBR.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < apply length_is to LenBR.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H9 : is_integer N'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < LEq: apply newNameScopes_length to NNS''' LenBR.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H9 : is_integer N'
LEq : Len <= N'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 1.28.3.3:

Variables: N FE EE V O N2 N3 N4 EE3 O2 O3 F T C Nmes X Len SNames BNames BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V (S::BR) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal EE3 O2 N2 **
R4 : <evalExpr {ES}> FE EE3 F V (S::BR) O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal EE3 O2
Ev : evalExpr FE EE C falseVal EE3 O2
Ev1 : evalExpr FE EE3 F V (S::BR) O3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : <evalExpr {P}> FE EE3 F V (S::BR) O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal ([(X, intVal 0)]::EE3) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE3) EE3
NNS'1 : length EE3 Len
NNS'2 : drop 1 ([(X, intVal 0)]::EE3) EE3
NNS'4 : names [[(X, intVal 0)]] SNames
NNS'5 : names EE3 BNames
NNS'6 : forall X1, mem X1 SNames -> mem X1 BNames -> false
Take : 1 + 0 = 1
H8 : is_list (is_list (is_pair is_string is_value)) ([(X, intVal 0)]::EE3)
NNS'' : newNameScopes [[], [(X, intVal 0)]] Len ([]::([(X, intVal 0)]::EE3)) EE3
EvA2_ES : <evalExpr {ES}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3 N3
EvA2_P : <evalExpr {P}> FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
EvA2 : evalExpr FE ([]::([(X, intVal 0)]::EE3)) F V (S::AR) O3
NNS''' : newNameScopes [[], [(X, intVal 0)]] Len AR BR
LenEE3 : length EE3 Len
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H9 : is_integer N'
LEq : Len <= N'
Less : N' < Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V (S::BR) O
 < apply less_lesseq_flip_false to Less LEq.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LenSBR: apply evalExpr_keep_scopes to _ _ _ Ev L.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenSBR : length (S::BR) Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LenBR: case LenSBR.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply length_is to LenBR.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H8 : is_integer N'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < LEq: apply newNameScopes_length to NNS'1 LenBR.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H8 : is_integer N'
LEq : Len <= N'
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < Less: apply lt_plus_one to LenBR1 _.

Subgoal 1.28.4:

Variables: N FE EE V EE' O N2 N3 N4 O2 O3 F T C Nmes X Len BR S AR N'
IH : forall N FE EE E V EE' O,
       <evalExpr {ES}> FE EE E V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH1 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH2 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH3 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N -> acc N * -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
IH4 : forall N FE EE E V EE' O,
        <evalExpr {ES}> FE EE E V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_expr E -> <evalExpr {P}> FE EE E V EE' O
IH5 : forall N FE EE A V EE' O,
        <evalArgs {ES}> FE EE A V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_args A -> <evalArgs {P}> FE EE A V EE' O
IH6 : forall N FE EE RF V EE' O,
        <evalRecFields {ES}> FE EE RF V EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_recFieldExprs RF ->
        <evalRecFields {P}> FE EE RF V EE' O
IH7 : forall N FE EE S EE' O,
        <evalStmt {ES}> FE EE S EE' O N ** -> acc N @ -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> is_stmt S -> <evalStmt {P}> FE EE S EE' O
R : <evalExpr {ES}> FE EE (condExpr C T F) V EE' O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N4 = N
R2 : N2 + N3 = N4
R3 : <evalExpr {ES}> FE EE C falseVal (S::BR) O2 N2 **
R4 : <evalExpr {ES}> FE (S::BR) F V EE' O3 N3 **
R5 : O2 ++ O3 = O
Names : names EE Nmes
IsNames : is_list is_string Nmes
Fr : fresh_name "X" Nmes X
Proj : Nmes |{expr}- condExpr C T F ~~> stmtExpr (seq (declare intTy X (num 0)) (ifThenElse C (assign X T) (assign X F))) (name X)
A2 : acc N2 *
A3 : acc N3 *
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : <evalExpr {P}> FE EE C falseVal (S::BR) O2
Ev : evalExpr FE EE C falseVal (S::BR) O2
Ev1 : evalExpr FE (S::BR) F V EE' O3
H5 : is_list (is_list (is_pair is_string is_value)) (S::BR)
H6 : <evalExpr {P}> FE (S::BR) F V EE' O3
L : length EE Len
EvD : evalStmt FE ([]::EE) (declare intTy X (num 0)) ([(X, intVal 0)]::EE) []
NNS : newNameScopes [[(X, intVal 0)]] Len ([(X, intVal 0)]::EE) EE
IsX : is_string X
H7 : is_list (is_list (is_pair is_string is_value)) ([]::([(X, intVal 0)]::EE))
EvA_ES : <evalExpr {ES}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2 N2
EvA_P : <evalExpr {P}> FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
EvA : evalExpr FE ([(X, intVal 0)]::EE) C falseVal (S::AR) O2
NNS' : newNameScopes [[(X, intVal 0)]] Len (S::AR) (S::BR)
NNS'1 : newNameScopes [[(X, intVal 0)]] Len AR BR
LenBR : length BR N'
LenBR1 : 1 + N' = Len
H8 : is_integer N'
LEq : Len <= N'
Less : N' < Len
============================
 <evalExpr {P}> FE EE (condExpr C T F) V EE' O
 < apply less_lesseq_flip_false to Less LEq.

Proof completed.
 < Prove exactEval:host:paramName_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_back.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_back.

Proof completed.
 < Prove exactEval:host:evalProgram_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalProgram_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalProgram_back.

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

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 related_all_scopes ET EE'
 < case IsE.

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 related_all_scopes ET EE'
 < Ty: case Ty.

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
============================
 related_all_scopes ET EE'
 < apply IH_C_E to _ _ _ _ _ Ty Ev1 _ _.

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
============================
 related_all_scopes ET EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 related_all_scopes ET EE'
 < apply IH_C_E to _ _ _ _ _ Ty1 Ev2 _ _.

Subgoal 1.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : related_all_scopes ET EE'
============================
 related_all_scopes ET EE'
 < search.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 related_all_scopes ET EE'
 < case IsE.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 related_all_scopes ET EE'
 < Ty: case Ty.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
============================
 related_all_scopes ET EE'
 < apply IH_C_E to _ _ _ _ _ Ty Ev1 _ _.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
============================
 related_all_scopes ET EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 related_all_scopes ET EE'
 < apply IH_C_E to _ _ _ _ _ Ty2 Ev2 _ _.

Subgoal 1.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : related_all_scopes ET EE'
============================
 related_all_scopes ET EE'
 < search.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 valueType V Ty
 < case IsE.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 valueType V Ty
 < Ty: case Ty.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
============================
 valueType V Ty
 < apply IH_C_E to _ _ _ _ _ Ty Ev1 _ _.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
============================
 valueType V Ty
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 valueType V Ty
 < apply IH_T_E to _ _ _ _ _ Ty1 Ev2 _ _.

Subgoal 2.27:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : valueType V Ty
============================
 valueType V Ty
 < search.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsE : is_expr (condExpr C T F)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 valueType V Ty
 < case IsE.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ty : typeOf FT ET (condExpr C T F) Ty
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 valueType V Ty
 < Ty: case Ty.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
============================
 valueType V Ty
 < apply IH_C_E to _ _ _ _ _ Ty Ev1 _ _.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
============================
 valueType V Ty
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 valueType V Ty
 < apply IH_T_E to _ _ _ _ _ Ty2 Ev2 _ _.

Subgoal 2.28:

Variables: FT ET Ty FE EE EE' O V EE3 O2 O3 F T C
IH_C_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_E : forall E FT ET Ty FE EE EE' O V,
           is_expr E -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOf FT ET E Ty ->
           evalExpr FE EE E V EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueType V Ty
IH_C_S : forall S FT ET ET' FE EE EE' O,
           is_stmt S -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> stmtOK FT ET S ET' ->
           evalStmt FE EE S EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET' EE'
IH_C_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           related_all_scopes ET EE'
IH_T_A : forall A FT ET Tys FE EE EE' O Vs,
           is_args A -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
           is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE -> typeOfArgs FT ET A Tys ->
           evalArgs FE EE A Vs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
             lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
             exists Scope TyEnv',
               (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
               stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
           valueTypeList Vs Tys
IH_C_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            related_all_scopes ET EE'
IH_T_RF : forall RF FT ET FTys FE EE EE' O FVs,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
            is_list (is_list (is_pair is_string is_typ)) ET -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE -> typeOfRecFields FT ET RF FTys ->
            evalRecFields FE EE RF FVs EE' O * -> (forall F RetTy ArgTys ArgNames Body RetVar RVVal,
              lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
              exists Scope TyEnv',
                (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
                stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') -> related_all_scopes ET EE ->
            valFieldTys FVs FTys
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
IsET : is_list (is_list (is_pair is_string is_typ)) ET
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Funs : forall F RetTy ArgTys ArgNames Body RetVar RVVal,
         lookup FT F (RetTy, ArgTys) -> lookup FE F (RetVar, (RVVal, (ArgNames, Body))) ->
         exists Scope TyEnv',
           (zip ArgNames ArgTys Scope /\ valueType RVVal RetTy) /\
           stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv'
Ctxs : related_all_scopes ET EE
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
Ty : typeOf FT ET C boolTy
Ty1 : typeOf FT ET T Ty
Ty2 : typeOf FT ET F Ty
H4 : related_all_scopes ET EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : valueType V Ty
============================
 valueType V Ty
 < search.

Proof completed.
 < Prove exactEval:host:paramTy_paramName_same.

Proof completed.
 < Prove exactEval:host:funOK_getFunEvalInfo_related.

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

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 output_forms O
 < case IsE.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 output_forms O
 < apply IH_E to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
============================
 output_forms O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 output_forms O
 < apply IH_E to _ _ _ Ev2.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : output_forms O3
============================
 output_forms O
 < apply output_forms_append to _ _ Ev3.

Subgoal 1.27:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 T V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : output_forms O3
H7 : output_forms O
============================
 output_forms O
 < search.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsE : is_expr (condExpr C T F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 output_forms O
 < case IsE.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
============================
 output_forms O
 < apply IH_E to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
============================
 output_forms O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 output_forms O
 < apply IH_E to _ _ _ Ev2.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : output_forms O3
============================
 output_forms O
 < apply output_forms_append to _ _ Ev3.

Subgoal 1.28:

Variables: FE EE V EE' O EE3 O2 O3 F T C
IH_E : forall E FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalExpr FE EE E V EE' O * ->
         output_forms O
IH_S : forall S FE EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalStmt FE EE S EE' O * ->
         output_forms O
IH_A : forall A FE EE Vs EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> evalArgs FE EE A Vs EE' O * ->
         output_forms O
IH_RF : forall RF FE EE Fields EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> evalRecFields FE EE RF Fields EE' O * ->
          output_forms O
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE (condExpr C T F) V EE' O @
Ev1 : evalExpr FE EE C falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 F V EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr C
H2 : is_expr T
H3 : is_expr F
H4 : output_forms O2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : output_forms O3
H7 : output_forms O
============================
 output_forms O
 < search.

Proof completed.
 < Prove exactEval:host:evalProgram_output_forms.

Proof completed.
 < Prove exactEval:host:paramName_exists.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_exists.

Proof completed.
Back to example home