< 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.